如果定义如下,如何将 NULL 传递给 COM 接口方法的参数[In, Out] ref int pchEaten
?
例如,考虑以下接口:
[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,非 null 值可能会产生性能成本等,所以我想避免它。