我目前正在寻找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#中详细说明这些接口的网络资源,那就太棒了!
答案 0 :(得分:1)
您提供的链接非常棒!它回答了我的问题,这是正确的方法签名。现在我明确地来自微软。
虽然您可以从Microsoft's Reference Source site找到许多源代码定义,但它不是您发现程序集中定义的方法的签名的唯一选择。
学习使用Visual Studio's Object Browser。查看菜单 - >对象资源管理器(或按F2键)。
在您实现界面的特定情况下,您可以让Visual Studio自动为您实现界面。右键单击界面名称广告,选择“实施界面”。