Unity3d 调用C++ DLL (Win平台)
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