Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过tcom删除COM对象_Com_Tcl - Fatal编程技术网

通过tcom删除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

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

这是我的节目

  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中。但这一切都取决于您所谈论的应用程序。。。。单词见解