引用非托管 COM 对象时,运行时可调用包装器 (RCW) 的范围是什么?根据文档:
运行时恰好创建一个 RCW
对于每个 COM 对象,无论
存在的参考文献数量
那个物体。
如果我必须“猜测” - 这个解释应该意味着“每个进程一个”,但真的是这样吗?任何额外的文档都将非常受欢迎。
我的应用程序在其自己的应用程序域中运行(它是 Outlook 插件),我想知道如果我在循环中使用 Marshal.ReleaseComObject(x) 直到其计数达到 0(按照建议)会发生什么。它会释放来自其他插件的引用(在同一 Outlook 进程中的其他应用程序域中运行)吗?
编辑:完美 - 现在混乱更大了。根据(来自 Lette 和 Ilya)的 2 个答案,我们有 2 个不同的答案。官方MSDN doc http://msdn.microsoft.com/en-us/library/8bwh56xe(VS.80).aspx每个进程说(对于版本 2.0+),但是缺少这句话版本。文档的1.1 http://msdn.microsoft.com/en-us/library/8bwh56xe(VS.71).aspx.
同时,在 Mason Bendixen 的文章中,它说它是针对每个应用程序域的。
由于他的文章很旧(2007 年 4 月),我已向他发送了一封电子邮件要求澄清,但如果其他人必须添加某些内容,请这样做。
Thanks
在托管中,我们有一个每个应用程序域
缓存
将规范 IUnknown 映射回
RCW。当 IUnknown 进入
系统(通过元帅呼叫,
通过激活,作为回报
来自方法调用的参数等),
我们检查缓存,看看是否有 RCW
COM 对象已存在。如果
存在映射,对
返回现有的 RCW。否则一个
创建新的 RCW 和缓存映射
被添加。
from 梅森的博客 http://blogs.msdn.com/mbend/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)