2010-04-22 84 views
3

是否可以增加未知接口上的RCW引用计数? (即不是基本的COM对象的引用计数)COM上的Addref RCW

我有一些旧的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会有所不同的(这就是为什么它是对象)

回答

0

还有的Marshal.AddRef()方法,错误的引用计数的变化,虽然。我很确定直接递增RCW计数是不可能的。挖掘自己深入的洞穴并修复旧代码。

8

还有一种方式,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电话。

如需进一步阅读,请参阅我写的blog post on the subject

相关问题