我已經定義了這樣的如何使用C#將IUnknown參數傳遞給COM接口?
interface Client : IUnknown
{
[id(1)] HRESULT GetSomething
(
enum SomeID someID,
[out] IUnknown **pUnknown
);
};
一個COM接口,我如何可以通過使用C#IUnknown
對象?
我已經定義了這樣的如何使用C#將IUnknown參數傳遞給COM接口?
interface Client : IUnknown
{
[id(1)] HRESULT GetSomething
(
enum SomeID someID,
[out] IUnknown **pUnknown
);
};
一個COM接口,我如何可以通過使用C#IUnknown
對象?
不傳遞任何東西,它返回接口指針。一個不透明的,IUnknown由所有COM接口實現。在C#中,它將是對象的對象,「可以是任何東西」的託管版本。所以基本的代碼如下所示:
object retval;
client.GetSomething(SomeID.Magic, out retval);
然後它是由你來返回的對象強制轉換成實際的接口類型,可能是基於魔術。你的問題根本沒有提示它可能是什麼,你必須閱讀COM組件的文檔纔能有一個想法。
假設你不知道什麼關於對象,你可能會使用一個IntPtr來表示IUnknown和然後得到一個RCW它使用Marshal.GetUniqueObjectForIUnknown爲:
// Get some object
IntPtr ptrObj = IntPtr.Zero;
Client.GetSomething(someID, out ptrObj);
object obj = Marshal.GetUniqueObjectForIUnknown(ptrIProfferService);