码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-05-14 16:29:57      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:unity3d   c++   plugins   

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


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

标签:unity3d   c++   plugins   

原文地址:http://blog.csdn.net/huutu/article/details/45721523

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!