CSharp调用Native DLL(托管方式)

最近又摊上事了,这会轮到C#调用C++的库出问题了,你说一个小小的protection key,怎么问题总是不断呢,伤神啊,作一个TS容易吗!

闲话少叙,附上本次操作的记录,以为纪念:

1.建立Native DLL

这个很简单,在vs里面新建一个Win32 Console Application,选择DLL即可,然后选择empty工程,接着加入自己的DLL头文件和实现代码cpp:

 

我们的Native库就算写好了,build后通过CFF查看export directory,会发现导出表中包含class名字和Check方法??

2.新建托管DLL

由于Native库中定义的是一个类,通过网上的一番搜罗,没看到有人直接通过DLLImport来使用类的,一般都是将此Dll封装为另一个托管的dll,然后供C#直接使用

这一步也很简单,唯一不同的,是新建工程时,要选择CLR- -Class Library。同样是建立一个新工程,注意在工程里链接NativeCppDll.lib,然后添加代码如下:

 

(原文中强调所有public的方法都需要单独重新声明定义,private的则可以直接使用,我没有测试是否确实如此,暂且放置)

build之后,用CFF查看产生的ManageCppDll.dll,各种特征和c#编译出来的程序一模一样

3.使用C#程序调用

新建一个C#的winForm工程,添加一个textbox和button,然后引用ManageCppDll.dll,并在button_click()中添加如下代码:

 

本文的所有代码都参考了http://blog.csdn.net/starlee/article/details/2864588 上的内容然后改写而成,原文中有很详尽的说明和更多的代码示例,我只是为了测试公司接口参考了其中一部分,记录下来以作备忘,代码中涉及到公司环境的内容都删去了,可能在删除过程中会存在一些遗漏,但是大致步骤明了了,基本就不会有什么问题

补充:我是用VS2010 编译 Manage库的,但是在后续测试的时候,发现在2008系统上无法加载,查看import directory里面竟然 包含msvcr90.dll, 很奇怪,只好安装一个VC2008的redistribute,然后,然后就正常了

发表评论

电子邮件地址不会被公开。 必填项已用*标注