一、C#调用DLL的方式
C++写的DLL有托管的DLL和非托管的DLL。
托管代码的对象在托管堆上分配内存,创建的对象由虚拟机托管。C#是典型的托管代码语言。
而非托管的代码对象有实际的内存地址,创建的对象必须要自己来管理和释放。如C和C++里的new、delete。
(一)调用非托管的DLL,主要采用静态方法调用:
[DllImport(“”)]
但这种方式好像只能调用DLL中的方法,不能调用类。
(二)调用托管的DLL,如果是C#写的托管的dll,由C#来调用应该更简单些。今天记录下C#调用C++写的托管的dll,这个对于初学者来说稍微有点复杂。
二、C#调用托管C++写的dll中的类及其方法
主要由几个步骤:
(一)使用托管C++创建dll
1、使用本地C++创建本地类;
2、添加clr支持;
3、创建托管C++类,以封装本地C++写的类;
4、导出为dll;
(二)C#添加引用并实现调用。
三、使用托管C++创建dll
我用的VS2017,VS2015的话不太一样,但都是可以实现的。
(一)新建项目——选择Visual C++中的Windows桌面向导,项目名为Cplusdll
选择其它的应该也行,但我不会设置别的,这个应该是最简单的,后期设置比较少。
注意这个项目刚新建出来是个Win32,x86的项目,先不要更改成x64的,否则可能会出错,等全部配置完,最后再改成x64就不会报错了。
(二)使用本地C++创建本地类
1、添加dllexport.h头文件
在添加类前,先在头文件中添加一个叫dllexport.h的头文件,内容如下:
注意这个项目名为Cplusdll,是个dll的项目,在这个项目属性中的C/C++中的预处理器的预处理器定义中已经预定义了CPLUSDLL_EXPORTS,所以在这个头文件中的dllexport是亮的。
2、创建本地C++类
这里是个本地类。
3、Cplusnative.h文件内容
friend ref class Cplus是等会要创建的托管类,这里还没有创建出来,先不用管。
4、Cplusnative.cpp文件内容
(三)添加clr支持
打开项目属性-常规
我上面的平台是x64的,一定要修改成win32,见下图:
否则会导致无法添加托管类。
(四)创建托管C++类,以封装本地C++写的类
添加类
Cplus.h文件内容:
Cplus.cpp文件内容:
(五)导出为dll
直接导出有可能会有这个提示:
需要在dllmain.cpp中添加一段提示:
就加这么一句话,其它的不要改动。然后再导出。
四、C#添加引用并实现调用。
1、添加C#项目
控制台也是一样的。
2、添加Cplusdll引用
3、调用
在窗口中添加两个TextBox,两个Button。
双击编写加法和乘法的触发事件:
保存。然后就可以调试运行了,但一定要注意一点:上面的Cplusdll.dll是x86的,所以下面的这个C#也一定要编译成x86的。否则是运行不起来的,即使设置的是Any Cpu也不行。或者两个都编译成x64的也可以,就是必须得两个一致才行。
修改C#项目的属性,并修改C#项目为启动项目
再次编译运行,就可以了。
下载链接:https://download.csdn.net/download/zhangyajunna/13203213



