是否可以在未知接口(interface)上增加 RCW 引用计数?
(即不是底层 COM 对象的引用计数)
我有一些旧的 COM 服务器代码
int Method1(object comobject) {
try {
// do something with comobject
return 0;
}
finally {
Marshal.ReleaseComObject(comobject);
}
}
这段代码工作正常,但现在我需要从另一个方法调用它。
int Method2(object comobject) {
int result = Method1(comobject);
// Do something with combject
}
comobject 的类型会有所不同(这就是它是 object 的原因)
最佳答案
有是 一种方式,RCW 计数计算对象已被编码(marshal)的次数,您可以通过执行额外的编码(marshal)来增加此数量。
public static T AddRcwRef<T>(T t)
{
IntPtr ptr = Marshal.GetIUnknownForObject(t);
try {
return (T)Marshal.GetObjectForIUnknown(ptr);
}
finally {
Marshal.Release(ptr); // done with the IntPtr
}
}
我不确定我是否会推荐使用此方法,最好尝试摆脱您的
ReleaseComObject
来电。如需进一步阅读,请参阅此 blog post on the subject我写。
关于com - COM RCW 上的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2689902/