1.新建项目选(Visual C++ ——>windows桌面程序——>动态链接库(DLL))如图。
(这里最好不要在其他项目中新建DLL项目否则会后很多未知问题。)
2.打开第一个DIllNewTest.cpp 写上如下代码
extern "C" _declspec(dllexport) int XXXX(int a, int b)
{
return a + b;
}
2.1 extern " C" 必须加上否则C#调用程序找不到入口点函数。
然后生成Dll时注意生成的是x86,x64,目前经测试,生成x86的只能用在C#x86,x64只能在C# x64的编译情况下调用。
2.2在C#中点击运行时和C++生成的dll保存一直,我上面生成是用x64所有这里也设置成x64如图。
2.3.写一个简单的C#控制台调用测试下,如图。
2.4可能没有这个选项是下拉点击配置管理器添加,如图
2.5选择编辑添加如图。
3.1添加引用如图标记1位置(这里下面在输入2的时候会提示添加)
3.2添加dll如图标记2位置[DllImport()]加载,路径名两种形式@“C:\1\2\3”或"C:\\1\\2\\3”形式,其他形式未测如果有需要自己在去尝试下这两种形式都是绝对路径形式,相对路径的我也不知道怎么填,如果有人知道的话欢迎交流分享下方法。
3.3 在3.2下面添加标记3位置的和C++中dll的函数实现同名,前面添加extern static 固定搭配必须这样写,我也想可以不添加就好了,麻烦。如果有多个函数定义,每个函数前都要加标记2位置哪行代码。
3,4 调用下这个函数,结构如图。
4.C++调用C++dll,直接在解决方案中添加引用要添加的dll文件
4.1然后声明,名字要和dll中定义的一致,如SEtTimedll中定义了int XXXX(int a,int b);在调用是声明在调用如图
4.2有用一个坑,升级vs后在编写dll是需注意,extern "C" _declspec(dllexport) int XXXX(int a) 改成 extern _declspec(dllexport) int XXXX(int a),即去掉 "C";
改成
不然编译器报错