C#代码调用C++的王道方法COM
其实COM已经比较过时了,但是对于C++调用的代码库,以及其他代码资源,都可以以COM的方式进行调用,或者以COM wrapper的方式调用,而且很方便啊。
COM毕竟不是技术的主流趋势了,所以没必要太深究细节了,COM的种种概念也早已引用到CLR里,这里我们主要是为了用它来调用别的语言编写的代码,也就是以C++做COM服务器,来让C#来调用。
COM本身的定义非常繁琐,好在微软提供了一个王道到家的工具,就是ATL,有了它 很轻松的创建出四海一家的COM组件。
首先,建立一个ATL 项目
弹出建立向导,DLL,继续
选上支持COM+和组件注册,然后起个名字
然后Finish 项目就建立料
很方便吧。
然后需要添加包含调用代码的接口,选中项目,增加一个类
增加一个Simple Object就好
随便起个名字 Next
不用选啥 Next
选择如下选择 然后Finish
然后再类视图里就能看到咱们的Interface了,为这个Add Method
为方法起名字,设定输入输出参数
第二页不用选啥 直接Finish
然后发现咱们方法已经在MyInterface.cpp里了,为方法添加实现吧。
OK,大功告成。编译之。如果是Vista以后系统,而VS又不是以管理员权限运行的话,会提示如下错误
于是用管理员权限启动一个CMD,注册这个COM组件
注册完成之后,要想在C#中很随意的调用,需要导出类型库
启动Visual Studio的命令行程序,用tlbimp导出类型。
运行结束后,在导出目录就可以找到一个DLL
在C#项目中引用导出的DLL
然后就可以建立接口对象了,接口对象里就包括了我们增加的方法。
直接调用即可
具体的COM技术是很复杂的一堆东西,但是ATL提供了一套很方便的操作,来实现COM组件。有了ATL,不必考虑琐碎的类厂实现和自动化方法,只需要添加需要的代码即可。
浙公网安备 33010602011771号