代码之家  ›  专栏  ›  技术社区  ›  IS4

无参考的封送[in]参考

  •  1
  • IS4  · 技术社区  · 8 年前

    一些函数,特别是在COM接口中,公开了 参数,用于指定方法应返回的接口类型。下面是这样一个示例方法:

    [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

    我在 马歇尔属性 ,并在 非托管类型

    1 回复  |  直到 8 年前
        1
  •  0
  •   Simon Mourier    8 年前

    你在找 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);
    
    推荐文章