.NET和COM互操作性:从.NET客户端发布COM

lm.*_*lm. 7 .net com com-interop

假设我有一个COM对象(非托管)和.NET客户端.

是否需要从.NET客户端Marshal.FinalReleaseComObject方法调用才能释放COM对象?

Jar*_*Par 2

不需要。不需要从 .Net 客户端显式释放 COM 对象。COM 对象将像任何其他 .Net 对象一样被收集,并且一旦删除对它的所有引用,就会释放它的底层本机句柄。

显式使用FinalReleaseComObject实际上可能会导致编程错误。如果代码中的另一个组件仍在引用 COM 对象,您将从其下面拉出本机对象。这可能会导致运行时失败。

  • 错误的做法。如果必须的话,你可以使用 GC.Collect() + GC.WaitForPendingFinalizers() ,永远不会出错。 (3认同)