VS2008下开发兼容COM组件的对象库。

时间:2022-12-14 23:15:55

http://www.cnblogs.com/CodeBlove/archive/2011/08/06/2129526.html

之前本来想用C++写通用库,但是在C++中编写COM组件太麻烦了,指针太容易出错,开发效率低。后来想用VB6开发,但是VB6代码组织和管理效果不好。而且C#中引用COM也不方便。后来发现VS下代码折叠功能不错,决定用VS2005开发,不过定义接口也是件麻烦事,最后接触了VS2008,查了些资料后,这一问题解决。

要使开发的DOT NET DLL项目能够支持COM接口,需要在项目中做以下设置:

  • 打开项目属性页
  • 点击“应用程序”选项卡->“程序集信息”按钮->勾选“使程序集COM可见”。
  • 填写项目信息和GUID->“确定”后返回(GUID可以通过VS2008的“工具”菜单中点击“创建GUID”来获取,一般是自动创建的) 。
  • 填写程序集名称和命名空间。
  • 点击“生成”选项卡->勾选“为COM互操作注册”。 顺便把“XML 文档文件”也打上勾。
  • 点击“签名”->勾选“为程序集签名”->输入密钥文件名->“确定”

经过以上操作,以后编译完之后,DLL已经具备了为COM公开接口的准备。然后使用DOT NET 工具regasm.exe程序注册DLL,命令格式如下:

regasm MyObject.dll /tlb:MyObject.tlb /codebase

为了方便操作可以把regasm.exe复制到DLL一个文件夹中,并把注册命令写入一个bat文件。

到此为止大功告成,VBA中或其他编程环境就可以调用C#开发的COM组件和对象了。

重要说明:即便如此,在VBA中要访问对象属性和方法,必须为每个类创建接口,所有属性方法中涉及到的对象引用必须以接口形式,否则即便在VBA中能够引用类库,并且定义了对象,也无法访问对象的属性和方法。