通过 tcom 删除 COM 对象

Delete COM object through tcom

我有一个使用 tcom 库访问 COM 对象的应用程序。在我的程序结束时,我试图删除 COM 对象。以下是我的参考。

http://wiki.tcl.tk/11900

这是我的程序

  package require tcom

  # create COM objec
  set application [::tcom::ref createobject "MyApplication"]

  # unbind and release COM object 
  ::tcom::unbind  $application 
  set application {}
  $application Quit 
  unset application 

结果是

  object does not implement method or property Quit

如何正确删除COM对象?

在我看来,你把这两行写错了:

  set application {}
  $application Quit 

您重置 application 然后尝试使用它。

然而,正如 Donal 在下面指出的那样,这不会导致您收到错误消息,我 怀疑 您的应用程序 MyApplication 没有实现实际上实现了 Quit 方法。

您可以使用 tcom 来找出接口定义了哪些方法和属性,例如以下代码为 Excel 执行此操作。

package require tcom
set excel [::tcom::ref createobj Excel.Application]

set iface [::tcom::info interface $excel]
foreach {method} [$iface methods] {
    puts $method
}

puts "--"
foreach {property} [$iface properties] {
    puts $property
}

$excel Quit
unset excel

这应该允许您查看 MyApplication 实际公开的方法及其参数和属性,如果没有 Quit 方法,则您需要返回应用程序的所有者并找出如果有的话,需要通过 com 接口调用什么方法来终止应用程序。

我对 tcl 一无所知,但我对 COM 有所了解。您的对象应用程序没有像它所说的那样实现方法 Quit。

然而

unset application 

将删除 COM 对象并将其从内存中卸载。

如果该对象也有一个 closeexit 方法,您可以先调用它,但您需要查看应用程序对象的文档。