某些函数(尤其是COM接口中的函数)公开了一个 REFIID 参数,该参数用于指定方法应返回的接口类型。这是一个这样的示例方法:
[DllImport("shell32.dll", PreserveSig=false)]
[return: MarshalAs(UnmanagedType.IUnknown)]
static extern object SHBindToObject(IShellFolder psf, IntPtr pidl, [MarshalAs(UnmanagedType.IUnknown)]object pbc, [In]ref Guid riid);
第四个参数是仅输入的,不应该由SHBindToObject更改,因此通过C#约定,将它作为引用传递(除了性能)是没有意义的。我无法清楚地记得它,但我记得应该有一些自定义属性或为此案例指定的东西,告诉编组人员它应该被真正编组,好像它是ref Guid
,而它是在签名中未指定ref
。
我在 System.Runtime.InteropServices 名称, MarshalAsAttribute 上的字段以及 UnmanagedType 枚举中查找了属性,但没有成功
是否有类似的东西,或者我的记忆是不正确的?在这种情况下使用这样的东西好吗?
答案 0 :(得分:0)
您正在寻找MarshalAs(UnmanagedType.LPStruct):
[DllImport("shell32.dll")]
[return: MarshalAs(UnmanagedType.IUnknown)]
static extern object SHBindToObject(
IShellFolder psf,
IntPtr pidl,
[MarshalAs(UnmanagedType.IUnknown)] object pbc,
[MarshalAs(UnmanagedType.LPStruct)] Guid riid);