C#代码调用C++的王道方法COM

 

其实COM已经比较过时了,但是对于C++调用的代码库,以及其他代码资源,都可以以COM的方式进行调用,或者以COM wrapper的方式调用,而且很方便啊。

COM毕竟不是技术的主流趋势了,所以没必要太深究细节了,COM的种种概念也早已引用到CLR里,这里我们主要是为了用它来调用别的语言编写的代码,也就是以C++做COM服务器,来让C#来调用。

COM本身的定义非常繁琐,好在微软提供了一个王道到家的工具,就是ATL,有了它 很轻松的创建出四海一家的COM组件。

首先,建立一个ATL 项目

image

弹出建立向导,DLL,继续

image

选上支持COM+和组件注册,然后起个名字

image

然后Finish 项目就建立料

很方便吧。

然后需要添加包含调用代码的接口,选中项目,增加一个类

image

增加一个Simple Object就好

image

随便起个名字 Next

image

不用选啥 Next

image

选择如下选择 然后Finish

image

 

然后再类视图里就能看到咱们的Interface了,为这个Add Method

image

 

为方法起名字,设定输入输出参数

image

第二页不用选啥 直接Finish

image

然后发现咱们方法已经在MyInterface.cpp里了,为方法添加实现吧。

image

OK,大功告成。编译之。如果是Vista以后系统,而VS又不是以管理员权限运行的话,会提示如下错误

image

于是用管理员权限启动一个CMD,注册这个COM组件

image

注册完成之后,要想在C#中很随意的调用,需要导出类型库

启动Visual Studio的命令行程序,用tlbimp导出类型。

image

运行结束后,在导出目录就可以找到一个DLL

在C#项目中引用导出的DLL

image

然后就可以建立接口对象了,接口对象里就包括了我们增加的方法。

直接调用即可

image

 

  

具体的COM技术是很复杂的一堆东西,但是ATL提供了一套很方便的操作,来实现COM组件。有了ATL,不必考虑琐碎的类厂实现和自动化方法,只需要添加需要的代码即可。

posted @ 2010-05-06 20:39  Archen  阅读(703)  评论(0)    收藏  举报