1

このように定義されたCOMインターフェースがあります

interface Client : IUnknown
{
    [id(1)] HRESULT GetSomething
    (
        enum SomeID someID,
        [out] IUnknown  **pUnknown
    );
};

IUnknownC#を使用してオブジェクトを渡すにはどうすればよいですか?

4

2 に答える 2

4

何も渡さず、インターフェイス ポインターを返します。不透明なものである IUnknown は、すべての COM インターフェイスによって実装されます。C# では、これは object 型のオブジェクトになります。これは、「何でもかまいません」のマネージド バージョンです。したがって、基本的なコードは次のようになります。

object retval;
client.GetSomething(SomeID.Magic, out retval);

そして、おそらくMagicに基づいて、返されたオブジェクトを実際のインターフェース型にキャストするのはあなた次第です。あなたの質問は、それが何であるかについてのヒントをまったく与えていません。アイデアを得るには、COM コンポーネントのドキュメントを読む必要があります。

于 2014-05-13T00:03:53.830 に答える
3

オブジェクトについて何も知らないと仮定すると、おそらく IntPtr を使用して IUnknown を表し、Marshal.GetUniqueObjectForIUnknownを使用してその RCW を取得します。

// Get some object

IntPtr ptrObj = IntPtr.Zero;


Client.GetSomething(someID, out ptrObj);
object obj = Marshal.GetUniqueObjectForIUnknown(ptrIProfferService);
于 2014-05-12T23:31:59.590 に答える