質問

未知のインターフェイスで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 電話。

さらに読むには、これを参照してください このテーマに関するブログ投稿 私が書いた。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top