当前位置:编程学习 > C#/ASP.NET >>

用C#写COM组件

说明:

我是一个C#程序员,但是有一次一个需求只能用C/C++去写,恰好需要读取的数据存放在DB(SQL CE v3)里面,而我又不会C/C++(关键是用OleDB访问DB,这个实在是繁琐),所以催生了用C#写一个COM组件,用C/C++去调用的想法.可谓,很傻很天真.但是也是一种思路,如果MS提供C API的话,问题就简单多了.可是事实是,MS自己的.NET CF用着C API,给用户却暴露着COM API.....OK,言归正传.

 

主要内容:

  • 用C#创建一个简单的COM组件(通过COM Interop)
  • 用VC++写一个客户端去访问COM组件.客户端用TLB文件.

本着易于使用的目的,我把Northwind导入到了SQLServer,然后测试了我的代码.(the sake of simplycity这个不知道啥意思,难道是由于出现纸尿布....).

  • 修改COM组件里面的机器名为你的SQL Server的机器名.(2005以上需要 机器名实例名)
  • 当然我在里面也创建了一个用户scott密码是tiger,用来连接数据库.你可以选择这个用户名,或者重新建一个.

Part I: 用C#创建一个简单的COM组件

COM对象是一种类库.COM组件将产生DLL文件.在VS环境里面创建COM组件请选择....

  File->New->Project->VisualC# Projects ->Class Library.

创建一个名为Database_COMObject的类库工程.

请记住:想要把C#对象当作COM对象需要以下几点...

  • class必须是public的
  • 属性,方法和事件必须是public
  • 属性和方法必须在Interface里面定义
  • 事件必须在事件的接口中

未在接口中定义的成员,而在实现里面是public的成员,对COM是不可见的,但是对其他的.NET程序是可见的.为了把属性和方法暴露给COM,你必须在接口中定义他们,并且把他们用DispId属性标记,在class里面实现(.....).在接口里面定义的成员只是为了使用vtable(虚函数表).要想暴露事件,你也必须把成员定义在事件接口里面并且标记DispId属性.类不需要实现此接口(???).类可以实现接口(一个类可以实现多个接口,只有第一个接口才是默认的接口.).暴露给COM的那些属性方法其实就在类的实现里面.他们必须被标记为public,而且要符合接口里面的定义.Also, declare the events raised by the class here. They must be marked public and must match the declarations in the events interface. (这两句不知道具体的含义,代码里面也没看出端倪.)

每一个接口都要有一个GUID属性(我当时上学的时候,把他叫属性属性,或者定制属性,现在也不清楚到底叫什么..).你可以用guidgen.exe来产生一个GUID值.

这个接口就长这个样子:

 

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,