如何在C#中声明经典COM接口IBindCtx?

时间:2017-03-28 23:04:35

标签: c# c++ com com-interop com-interface

我目前正在寻找C#和COM接口。 C#中的COM文档很稀疏,因为C#来自COM之后(也许我们在SO处可以修复)。我发现了the C# compiler can give informative error messages。可以从错误消息中读取方法签名的C#语法版本,然后添加到您的类中。这适用于IAdviseSink,但不适用于IBindCtx。

我收到错误的最后一个方法wp search-replace abc.multisite.com multisite.com/abc --network C ++中的语法是RevokeObjectParam(string a)HRESULT RevokeObjectParam( [in] LPOLESTR pszKey );是一个以空字符结尾的2字节字符串,所以使用LPOLESTR应该有效。但它没有,我收到错误消息

[MarshalAs(UnmanagedType.LPWStr)]

那么如何修改此方法签名呢?下面是可复制到Visual Studio中的完整代码(创建一个类库项目)。

     * Class1.cs(25,14,25,40): error CS0539: 'IBindCtx.RevokeObjectParam' in explicit interface declaration is not a member of interface
     * Class1.cs(6,18,6,24): error CS0535: 'ComInterfacesInCSharp.Class1' does not implement interface member 'System.Runtime.InteropServices.ComTypes.IBindCtx.RevokeObjectParam(string)'

顺便说一下,如果你有一个在C#中详细说明这些接口的网络资源,那就太棒了!

1 个答案:

答案 0 :(得分:1)

  

您提供的链接非常棒!它回答了我的问题,这是正确的方法签名。现在我明确地来自微软。

虽然您可以从Microsoft's Reference Source site找到许多源代码定义,但它不是您发现程序集中定义的方法的签名的唯一选择。

学习使用Visual Studio's Object Browser。查看菜单 - >对象资源管理器(或按F2键)。

在您实现界面的特定情况下,您可以让Visual Studio自动为您实现界面。右键单击界面名称广告,选择“实施界面”。

enter image description here