通过tcom删除COM对象
我有一个使用tcom库访问COM对象的应用程序。在程序的最后,我试图删除COM对象。以下是我的参考资料 这是我的节目通过tcom删除COM对象,com,tcl,Com,Tcl,我有一个使用tcom库访问COM对象的应用程序。在程序的最后,我试图删除COM对象。以下是我的参考资料 这是我的节目 package require tcom # create COM objec set application [::tcom::ref createobject "MyApplication"] # unbind and release COM object ::tcom::unbind $application set applicatio
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
您可以重置应用程序
,然后尝试使用它
但是,正如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对象并将其从内存中卸载
如果对象还有一个
close
或exit
方法,您可以先调用它,但您需要检查应用程序对象的文档。顺便说一句,我使用的TCL 8.4版本确实不起作用,但不会(我希望!)导致提问者提到的错误。的确,给定的代码可能会导致“命令名不明确”错误。请确保取消设置直接或间接从MyApplication获得的所有变量-最好是在application last中。但这一切都取决于您所谈论的应用程序。。。。单词见解