このように定義されたCOMインターフェースがあります
interface Client : IUnknown
{
[id(1)] HRESULT GetSomething
(
enum SomeID someID,
[out] IUnknown **pUnknown
);
};
IUnknown
C#を使用してオブジェクトを渡すにはどうすればよいですか?
このように定義されたCOMインターフェースがあります
interface Client : IUnknown
{
[id(1)] HRESULT GetSomething
(
enum SomeID someID,
[out] IUnknown **pUnknown
);
};
IUnknown
C#を使用してオブジェクトを渡すにはどうすればよいですか?
何も渡さず、インターフェイス ポインターを返します。不透明なものである IUnknown は、すべての COM インターフェイスによって実装されます。C# では、これは object 型のオブジェクトになります。これは、「何でもかまいません」のマネージド バージョンです。したがって、基本的なコードは次のようになります。
object retval;
client.GetSomething(SomeID.Magic, out retval);
そして、おそらくMagicに基づいて、返されたオブジェクトを実際のインターフェース型にキャストするのはあなた次第です。あなたの質問は、それが何であるかについてのヒントをまったく与えていません。アイデアを得るには、COM コンポーネントのドキュメントを読む必要があります。
オブジェクトについて何も知らないと仮定すると、おそらく IntPtr を使用して IUnknown を表し、Marshal.GetUniqueObjectForIUnknownを使用してその RCW を取得します。
// Get some object
IntPtr ptrObj = IntPtr.Zero;
Client.GetSomething(someID, out ptrObj);
object obj = Marshal.GetUniqueObjectForIUnknown(ptrIProfferService);