Unity调用C++的Dll

摘要:C++的DLL载入,即用C++写的库,Unity转化为C#调用。

使用步骤如下:

  • 首先在VS中创建生成出你的dll也就是动态链接库,在Win32中选择流程即可。需要注意几点,vs2017版本的需要有C++的vs功能包下载才能安装,2017版本的直接选Dll动态链接就行,而前面几个版本则不需要,流程是一模一样的。

unity 为什么引用不到dg unity 引入dll_Unity


这里选择Win32控制台应用程序。然后再根据如下图操作,不过不一定要空项目,带预编译头也可以。

unity 为什么引用不到dg unity 引入dll_unity 为什么引用不到dg_02


之后就是一般的添加C++文件,在解决方案资源管理器的源文件中添加。

unity 为什么引用不到dg unity 引入dll_Unity_03


之后写你的绑定函数,稍微复杂一点的可以再行研究,比如是自定义类,自己封装过的包,需要再探讨,这里先说明基本的流程和思路。

unity 为什么引用不到dg unity 引入dll_unity 为什么引用不到dg_04


在cpp中添加如下简单的一个加法函数,用API导出,运行后就能得到dll。

extern "C" _declspec(dllexport)   返回类型 + 函数签名

不过我在后面unity使用的时候遇到了一些问题,就是我的Unity是64位的,而我导出的dll默认是32位,不匹配。所以我后来又做了其他的工作。

unity 为什么引用不到dg unity 引入dll_C++_05


我们能在vs的上方看到导出的dll是什么版本的。点击配置管理器,在活动解决方案平台新建一个平台,选择x64,然后复制设置的框选择Win32就行。这样我们就改成x64的版本了。

unity 为什么引用不到dg unity 引入dll_C#_06

  • 这样我们完成了vs上面的操作,然后我们转到Unity操作,把项目文件夹里面的x64里面的dll复制出来,拉到unity项目中的Plugins文件夹中,必须是这个名称文件夹,这是Unity里面的一个知识, Unity里面的命名很重要,许多地方要保持一致。

注意x64的版本,Dll在外面的x64的文件夹里面找,能找到如下的.dll文件。

unity 为什么引用不到dg unity 引入dll_C++_07


然后我们能看到这样的项目列表,新建如下的C#脚本MyDll和MyTest。代码如下:

unity 为什么引用不到dg unity 引入dll_Dll_08

//MyDll.cs
using System.Runtime.InteropServices;

public static class MyDll
{
    [DllImport("MyDll", EntryPoint = "Add")]
    public static extern int MyAdd(int x, int y);
}
// MyTest.cs
void Start ()
    {
        var x = MyDll.MyAdd(1, 2);
        Debug.Log(x);
    }

随便吧MyTest脚本绑到一个物体上去,(MyDll不用)然后我们能在Console表中看到如下输出

unity 为什么引用不到dg unity 引入dll_unity 为什么引用不到dg_09


这样一个基本的流程就完成了。然后我们能稍微写一点复杂一点的函数代码,能了解到Unity调用C++等dll的思路。