是否有可能增加未知接口的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的类型会有所不同(这就是为什么它是对象的原因)

有帮助吗?

解决方案

有元帅.addref()方法,但错误的参考计数更改。我敢肯定,直接增加RCW计数是不可能的。将自己从所处的深孔中挖出,并修复旧代码。

其他提示

那里 一种方式,RCW计数计算了该对象已被填写多少次,您可以通过执行额外的元帅来增加此数字。

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 呼叫。

要进一步阅读,请参阅 有关该主题的博客文章 我写。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top