簡體   English   中英

Marshal.QueryInterface()-如何使用返回值?

[英]Marshal.QueryInterface() - How to use the returned value?

我試圖找到一個答案,但是沒有運氣。 沒有有關如何使用Marshal.QueryInterface返回的值(在我的情況下為“ pISomething”)的文檔。 它是IntPtr一個實例,但我需要它作為ISomething實例。 簡單的轉換不起作用。 因此,有人可以顯示如何使用Marshal.QueryInterface返回的接口嗎?

例:

IBaseFilter pMyFilter = getMyFilter();

IntPtr pUnknown = Marshal.GetIUnknownForObject(pMyFilter);

IntPtr pISomething;
int success = Marshal.QueryInterface(pUnknown, ref IID_ISomething, out pISomething);

// success = 0 here!

與所有元帥方法一樣,它是一種低級方法,並非旨在執行您想要的操作。 僅在需要將接口指針傳遞給本機代碼時才使用它。

CLR將自動為您調用IUnknown :: QueryInterface(),而無需對其進行顯式編程。 您只需在C#代碼中使用強制類型轉換即可:

 ISomething itf = (ISomething)pMyFilter;

請注意,如果對象未實現該接口,則將引發異常。 請注意,必須像IBaseFilter一樣使用[ComImport]屬性聲明ISomething。 如果導入類型庫,則為自動。 該屬性提供了CLR正確調用QueryInterface所需的IID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM