如果將NULL傳遞給COM接口方法的參數(如果它被定義爲[In, Out] ref int pchEaten
)?將NULL傳遞給COM接口方法的參數/輸出參數
例如,考慮如下界面:
[ComImport, Guid ("000214E6-0000-0000-C000-000000000046")]
[InterfaceType (ComInterfaceType.InterfaceIsIUnknown)]
internal interface IShellFolder
{
void ParseDisplayName (
[In] IntPtr hwnd,
[In] IBindCtx pbc,
[In, MarshalAs (UnmanagedType.LPWStr)] string pszDisplayName,
[In, Out] ref uint pchEaten,
[Out] out PIDLIST ppidl,
[In, Out] ref SFGAO pdwAttributes);
// ...
}
MSDN說下列有關pchEaten
參數:的指針,該接收被解析的顯示名稱的字符的數目的ULONG值。如果您的應用程序不需要此信息,請將pchEaten設置爲NULL,並且不會返回任何值。pdwAttributes
參數也可以設置爲NULL。
但是,當我從C#調用ParseDisplayName
方法時,我看不到將null
傳遞給ref參數的方法。
如果我從一個DLL調用函數,我可以多次導入一個函數:一個帶有IntPtr
參數,一個帶有正確的簽名,並根據需要選擇過載,我需要傳遞和接收值。但是,如果我嘗試在COM中多次導入相同的方法,它將不起作用,因爲方法的順序非常重要,函數指針也會發生變化。
問題:如何使用輸入/輸出參數的值和NULL來調用COM方法?
注意:這只是一個例子。我知道我可以創建一個虛擬變量,將它傳遞給ref
參數並忽略返回的值。然而,方法的行爲可能取決於其值是否爲NULL,非空值可能會導致性能成本等,所以我想避免它。
看看這個答案:http://stackoverflow.com/questions/736474/c-how-to-pass-null-to-a-function-期待-a-ref –
@FlorianGl這個問題和答案不包括我的情況,一個COM接口。正如我已經提到的,我知道DLL案例的解決方案。 – Athari
這並不能解決你的問題,但是這個參數必須是'out',而不是'ref'。 – sharptooth