如何在不依赖异常的情况下判断COM对象是否已与其基础RCW分离?

J S*_*ith 7 .net com com-interop rcw

判断COM对象的引用计数是否达到0的一种方法是尝试访问其中一个成员并捕获生成的InvalidComObjectException,这不是很优雅,并且似乎不能很好地适应.另一种方法是调用Marshal.ReleaseComObject并检查结果,但这需要将Com对象的引用计数减少1.

有简单明了的方法吗?

edt*_*guy 2

在.NET 论坛上,这个问题之前已经被提出过。

问:是否有任何方法可以在不减少内部参考计数的情况下获取它?

答:没有类库方法可以提供此服务。

问:如果不减少内部引用计数就不可能获得它,有什么方法可以在调用后增加其计数吗Marshal.ReleaseComObject()

答:同样,没有类库方法提供此服务。

他们确实有一种尴尬的方法来实现这一点,作为一种解决方法,使用从 COM 服务器导出的全局 API。
详细信息请参见:http://social.msdn.microsoft.com/Forums/vstudio/en-US/9de651e0-ad3c-44be-8855-3dc13673ac73/how-can-i-get-the-internal-marshaling-count-of -an-rcw-systemcomobject?forum=clr

除此之外,看起来你被困住了。希望对您有帮助。