最近想做一个小工具,底层的算法是一个现成的DLL,基于VC 6编译的,而工具本身我希望用C#来写,这样开发效率会更高一些。以前并没有怎么深入研究过DotNET平台的东西,这下算是有机会了,查了一些资料,一般来说,C#要想调用Native C++的代码,可以有三种办法:1、利用P/Invoke机制;2、将C++代码封装为COM对象;3、利用C++/CLI实现对本地C++的封装并输出托管接口。
由于我的这个DLL接口比较复杂,并不是一种很规范的API接口形式,所以利用P/Invoke方式并不是很方便,COM对象也不是我想要的,于是决定采用第三种办法,先用C++/CLI对本地DLL进行一层封装,然后在C#工程中调用C++/CLI的Wrapper对象。
不过C++/CLI看起来貌似和C++语法差不多,可是却有很多不同,用起来感觉挺别扭,而且,在我的一台机器上编译完成后,运行时总是报“未找到程序集……”的错误,利用Depends查看后觉得没有问题,但错误依旧存在,后来,我将编译结果拷贝到另外一台机器上运行,没有问题,仔细想了想,恐怕这个和操作系统还有点关系,出错的那台机器是64位的Vista,而在32位机器上运行都没有问题,莫非还必须把Wrapper工程和Native C++都按64位编译才行?这个问题恐怕只能留在以后有时间的时候再进一步研究了。