Unity3d 调用C++ DLL (Win平台)

时间:2021-08-13 19:03:03

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

Unity3d 调用C++ DLL (Win平台)

转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn

选择空项目 动态链接库

Unity3d 调用C++ DLL (Win平台)

转自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。最佳映射功能提供在没有匹配项时,自动提供匹配的字符


运行结果

Unity3d 调用C++ DLL (Win平台)


示例工程下载:

http://download.csdn.net/detail/cp790621656/8699673