gpt4 book ai didi

vb.net - 释放 COM 对象

转载 作者:行者123 更新时间:2023-12-02 04:25:24 24 4
gpt4 key购买 nike

我正在从 Word 插件调用 COM 对象。

一点之后,我想关闭我的 COM 对象并返回到 Word。我的问题是,我的 COM 对象(我的另一个应用程序的导入形式)一直被打开。当我尝试手动关闭它时,出现以下错误:

/image/xdvGt.png

我的代码:

   Private Sub save_Click(sender As Object, e As RibbonControlEventArgs) Handles save.Click
Dim importer = GetObject("", "IMPORT.Application")
Dim dictionary As Dictionary(Of Integer, String)
Dim doc As Document = Globals.ThisAddIn.Application.ActiveDocument
Try
'Doing some stuff...

importer.SetWindowVisible(False)
doc.Close(False)

Catch ex As Exception
MessageBox.Show(ex.message)
Finally
GC.Collect()
GC.WaitForPendingFinalizers()
System.Runtime.InteropServices.Marshal.ReleaseComObject(importer)
importer = Nothing
End Try
End Sub

他们在网上到处解释,我必须使用以下命令来释放 COM 对象:

System.Runtime.InteropServices.Marshal.ReleaseComObject(importer)

在我的情况下它似乎不起作用。有人知道为什么吗?

是否可以获取我的 COM 应用程序的 processID,以便在我的代码末尾终止它?

//编辑

所以我尝试在 finally 语句中调用 myOtherMethod() (importer 现在是一个类变量)。我没有做任何其他事情。一切都没有改变。

Private Sub myOtherMethod()
GC.WaitForPendingFinalizers()
System.Runtime.InteropServices.Marshal.ReleaseComObject(importer)
End Sub

最佳答案

您有 COM 对象泄漏。指向 COM 对象的智能指针存储在您的代码中的某处,但未释放。您应该释放指针的所有实例。

关于vb.net - 释放 COM 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55020352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com