用C#编写一个进程外的COM组件示例代码讲解

代码的链接在《C#编写一个进程外的COM组件》,小技巧:如果你要同时看示例代码和讲解的话,可以用浏览器分别打开示例代码和这篇文章,然后使用Windows提供的纵向平铺窗口功能就可同时看两篇文章了。

 

TestComVisibleClass.cs里面定义了我们要发布给COM客户程序的.NET对象,由于我们的.NET进程外组件需要调用几个COM库的API,因此在ComHelperClass里面定义这些API.NET里面的声明方式,正确地声明P/Invoke函数的原型非常困难,要求程序员对Win32COM和托管代码都很熟悉才可以做,所以我写了另外一篇文章《使用Signature Tool自动生成P/Invoke调用Windows APIC#函数声明》简化P/Invoke函数声明的步骤。

 

ComHelperClass类里面CoRegisterClassObject函数的原型比较有意思,注意rclsid参数前面的[MarshalAs(UnmanagedType.LPStruct)]属性,这个属性告诉.NET,在从.NET一端传递rclsid参数值到非托管代码一端时,不要使用默认的列集(Marshal)规则,在P/Invoke里面,NET默认将结构体对象完整复制到非托管的内存里,使用UnmanagedType.LPStruct告诉NETGuid

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值