Unity3d提供了功能可以让我们自己用各种语言编写 Plugin 来在Unity中使用,官方有简单的文档介绍
http://docs.unity3d.com/Manual/30_search.html?q=dllimport
之前的博文介绍了在 Android 平台使用C++ Plugin。
http://blog.csdn.net/huutu/article/details/43602659
本文在Win平台使用C++ DLL。
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
编译一个简单的C++ DLL
首先来编译一个简单的C++ DLL供Unity3d 使用。转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
在VS 中选择控制台 项目
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
选择空项目 动态链接库
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
然后添加代码 Calculate.h Calculate.cpp 文件。
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
Calculate.h 代码如下:
# define _DLLExport __declspec (dllexport) //标记为导出函数; extern "C" long long _DLLExport dlltest();
Calculate.cpp 代码如下:
#include "Calculate.h" long long dlltest() { long long a = 1; int b = 0; while(b<1000000000) { a=a+b; b++; } return a; }
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
将 配置 修改为 Release ,我们编译一个Release 版本。 找到编译出来的 DLL文件,例如我这里是 TestDLL.dll 。
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
在Unity3d工程中使用DLL
创建一个Unity3d工程,在Assets 下创建 文件夹 Plugins 目录,把我们的DLL 文件 放到这个目录中。
测试代码如下:
using UnityEngine; using System.Collections; using System.Runtime.InteropServices; public class NewBehaviourScript : MonoBehaviour { [DllImport ("TestDLL")] private static extern long dlltest(); // Use this for initialization void Start () { } void OnGUI() { if(GUI.Button(new Rect(100,100,200,200),"Test DLL")) { long before=System.DateTime.Now.Ticks; Debug.Log("dlltest="+ dlltest()); Debug.Log("take "+(System.DateTime.Now.Ticks-before)); } if(GUI.Button(new Rect(300,300,200,200),"Test Mono")) { long before=System.DateTime.Now.Ticks; Debug.Log("monotest="+ monotest()); Debug.Log("take "+(System.DateTime.Now.Ticks-before)); } } // Update is called once per frame void Update () { } long monotest() { long a = 1; int b = 0; while(b<1000000000) { a=a+b; b++; } return a; } }
使用DLL 中的函数要按照如下格式:
[DllImport ("TestDLL")] private static extern long dlltest();
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
DllImport 参数说明:
EntryPoint 指定要调用的 DLL 入口点。
CharSet 控制名称及函数中字符串参数的编码方式。默认值为 CharSet.Ansi。
ExactSpelling 是否修改入口点以对应不同的字符编码方式。
CallingConvention 指定用于传递方法参数的调用约定。默认值为 WinAPI。该值对应于基于32位Intel平台的 __stdcall。
BestFitMapping 是否启用最佳映射功能,默认为 true。最佳映射功能提供在没有匹配项时,自动提供匹配的字符
运行结果
示例工程下载:
http://download.csdn.net/detail/cp790621656/8699673