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
时间: 2024-11-02 18:02:17

Unity3d 调用C++ DLL (Win平台)的相关文章

Unity3d 调用 C++ DLL之 DLL回调Unity3d (C++ DLL回调 C#函数)

上篇   Unity3d 调用C++ DLL (Win平台)  介绍了简单的 Unity3d 调用 C++ DLL的方法,但是这样是不够的,这里再讲下通过函数指针让 C++ DLL中回调 Unity3d 的方式. 转自http://blog.csdn.net/huutu 星环游戏 http://www.thisisgame.com.cn 创建DLL 以及在 Unity3d 中调用 DLL 中函数在上篇中介绍了. 首先,在C#中是没有函数指针的,我们使用 Delegate . 转自http://b

Unity3D 加密 Assembly-CSharp.dll (Android平台) 防止反编译【转】

转自 http://blog.csdn.net/u013108312/article/details/54234439  

Unity3d 调用 Luajit C++ DLL 实现调用 Lua脚本

前面介绍了在 Unity3d 中通过 Plugin 功能来调用 C++ DLL 中的函数 以及回调的使用方法,但最终目的还是让 Unity3d 中可以调用 Lua 脚本中的函数,现在来实现. 首先关注前面两篇文章: 1.Unity3d 调用C++ DLL (Win平台) 2.Unity3d 调用 C++ DLL之 DLL回调Unity3d (C++ DLL回调 C#函数) 文章转自http://blog.csdn.net/huutu 星环游戏 http://www.thisisgame.com.

Unity3d 调用C++的DLL

原地址:http://www.cnblogs.com/alongu3d/archive/2013/04/20/3031904.html Unity 3D 调用DLL的方法 本文转载:渡蓝的博客园 http://www.cnblogs.com/oldman/articles/2501486.html 如果涉及到版权问题,则请留言,我会尽快删除! 接触Unity 3D 时间不长,看到网上有人问怎么通过Unity来调用Dll,而且发现这个问题似乎是用unity的朋友并不熟悉DLL的使用造成的,正好我使

Native Application 开发详解(直接在程序中调用 ntdll.dll 中的 Native API,有内存小、速度快、安全、API丰富等8大优点)

文章目录:                   1. 引子: 2. Native Application Demo 展示: 3. Native Application 简介: 4. Native Application 有何妙用: 5. MJ0011 关于 Native Application 的文章整理: 6. 互联网上其他关于 Native Application 的文章整理: 7. 小结: 1. 引子: 其实在好久以前就看了 MJ0011 翻译的那个<Native 应用程序详细>系列的文

JAVA调用动态链接库(dll)

    菜鸡爬坑 基础知识  因为某个东西的keygen我只会在win下生成!! 所以只能出此下策!!之前一直是android下用jni调用so文件,现在试下java在win平台下调用dll 首先还是老套路,直接在dll中弹出一个信息框具体流程如下:在Java中定义一个方法,在C++中实现这个方法,在方法内弹出信息框.首先在java中定义一个类 代码: package cn.ylca.dll; public class DllEntity { //本地方法          public nat

C#调用外部DLL介绍及使用详解

一.      DLL与应用程序 动态链接库(也称为DLL,即为“Dynamic Link Library”的缩写)是Microsoft Windows最重要的组成要素之一,打开Windows系统文件夹,你会发现文件夹中有很多DLL文件,Windows就是将一些主要的系统功能以DLL模块的形式实现. 动态链接库是不能直接执行的,也不能接收消息,它只是一个独立的文件,其中包含能被程序或其它DLL调用来完成一定操作的函数(方法.注:C#中一般称为“方法”),但这些函数不是执行程序本身的一部分,而是根

C# 调用win32 DLL报错 System.BadImageFormatException

C# 调用win32 DLL报错  System.BadImageFormatException 项目右键属性->项目设计器->生成->平台->把'默认设置(任何 CPU)'改为x86. 因为'任何 CPU'的程序在64位的机器上就会用运行为64位,而64程序是不能加载32位dll的

Atitit.java&#160;jna&#160;调用c++&#160;dll&#160;的总结

Atitit.java jna 调用c++ dll 的总结 1. JNA技术解密1 1.1. JNA工作原理1 2. JNA技术难点 Java—C和操作系统数据类型的对应表1 2.1. 1 2.2. JNA编程过程3 2.2.1. 跨平台.跨语言调用的第一原则:就是尽量使用基本.简单的数据类型,尽量少跨语言.平台传递数据!4 3. 参考4 1. JNA技术解密 1.1. JNA工作原理 JNA是建立在JNI技术基础之上的一个Java类库,它使您可以方便地使用java直接访问动态链接库中的函数.