質問
未知のインターフェイスで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のタイプは異なります(それがオブジェクトである理由です)
解決
Marshal.Addref()メソッドがありますが、参照カウントが誤っています。 RCWカウントを直接増加させることは不可能だと確信しています。あなたがいる深い穴から自分自身を掘り出し、古いコードを修正してください。
他のヒント
三 は 方法では、RCWカウントは、オブジェクトがマーシャリングされた回数の数をカウントします。追加の元sを実行することでこの数を増やすことができます。
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
電話。
さらに読むには、これを参照してください このテーマに関するブログ投稿 私が書いた。
所属していません StackOverflow