素心人

导航

在VS2015中用C++编写可被C#调用的DLL

VS2015用C++创建动态库DLL步骤如下:

(1)启动VS2015-->文件-->新建-->项目,按图二进行选择,选择Win32项目,弹出创建窗口,如第二张图。注意.net版本根据自己项目情况选择,我是在Unity中使用,所以这里选择.net 2.0。输入项目名称,然后确定。 图片

 
(2)在Win32应用程序向导对话框中选择【下一步】


(3)按下图进行勾选,然后点完成  预编译头作用:VS 默认情况下会创建并使用预编译头文件(也就是自动创建 StdAfx.h 和 StdAfx.cpp 这两个文件),以便在编译时加快编译速度,预编译器将它编译后,会生成一 个 Pre-compiled header ,也就是 pch 文件,这样下次就可以直接使用这里已经编译好了的代码了。

 
(4)整个测试项目创建后,整体效果如下图:

 
(5)在解决方案中右击【头文件】文件夹,然后右击选择【添加】-->【新建项】,在弹出的添加新项对话框中进行如下选择:
(6)打开TestDll1.cpp并添加如下图红色框中的方法GetString1和GetString2,同时将TestDll.h头文件包含进来,两个方法分别是两种返回字符串的方式。具体如下图:
(7)打开TestDll.h并添加方法GetString1和GetString2的导出形式,具体如下图:

 

注意:_stdcall定义导出函数入口点调用约定为_stdcall,加入_stdcall就可以实现导出的DLL被其它语言调用。

extern "C"说明导出函数使用C编译器,则函数名遵循C编译器的函数名修饰规则,不加extern "C"说明使用C++编译器的函数名修饰规则。

 

(8)生成方式选择Release,具体是选择X86还是X64根据自己需求,由于俺们项目是在X64系统运行,所以这里选择X64。具体如下图:

图片

(9)Unity项目中C#代码使用C++生成的dll,将dll文件放到Assets-->Plugins-->x64目录下。

引入命名空 using System.Runtime.InteropServices;     IntPtr转转String类型时需要。C++与C#中的String数据类型并不对应

Unity中执行结果如下:

图片

 

 

图片

 

参考资料:

https://blog.csdn.net/songyi160/article/details/50754705

posted on 2018-07-20 11:28  素心人  阅读(401)  评论(0编辑  收藏  举报