1

InteropServices.Marshal.QueryInterfaceC# で COM オブジェクトを特定の型に変換しようとしていますが、最初と最後のパラメーターを渡すのに問題があります。

私はそれが参照であると想定していますが、構文エラーのためにクラスを参照して QueryInterface を使用するIntPtrことができません。IntPtr

もちろん、以下に示すコードの構文は正しくありませんが、私が何をしようとしているのかがわかります。

set
{
    ClassA a;
    Guid guid = Guid.Parse("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");
    System.Runtime.InteropServices.Marshal.QueryInterface(ref value, 
        ref guid, out a);
}

編集:

[ComVisible(true), Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")]
public ClassA : COMInterface{ ... }

ClassA は C# クラスでCOMInterface、COM インターフェイスです。を実装する唯一のクラスですCOMInterface。スコープ内は COM インターフェイスへの参照ですvaluesetCOMInterface

4

1 に答える 1

3

あなたはこれを行うことができません。

あなたIntPtrが持っている は、 の実装へのポインタCOMInterfaceです。完全に別のクラスを実装することは完全に実現可能であり、それがCOMInterfaceポインタを保持しているものです。

つまり、 への呼び出しは、 のインスタンスではなく、QueryInterfaceの .NET 表現への参照を取得するためにのみ使用できます。アンマネージ コードで実装されているクラスの内容を、マネージ コードが理解できるものに整形してから、まったく別のものに書き込む必要があります。COMInterfaceClassACOMInterfaceClassA

于 2012-09-25T14:43:39.793 に答える