原地址: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的使用造成的,正好我使用过C++,对DLL还比较熟悉,因此写了一个小小的教程来谈谈unity的Dll调用方法。

1.创建DLL

困扰Unity人员的主要问题大概出于Dll不会生成。这个确实比较麻烦,我这里给出一个vs 2008中创建DLL的方法。

1)首先打开vs2008,当然2005或者2003也都差不多。我这里用的是2008.

在C++项目中选择 Win32程序,然后在控制台程序或者win32程序任选一个。 写上项目名字点创建。

2) 任选一个的原因是这里并不重要,重要的是下一步,创建以后会出现一下这个面板。 选下一步见如下选项:

注意,首先选DLL,证明我们这个程序是个dll项目。选“空项目”的目的是建一个计较干净的DLL程序,里面的代码都有我们手写完成,这样写过什么我们都知道。

3)创建项目,这样我们得到一个空项目,在这个项目中,除了几个文件加以外什么也没有,我们在文件夹上点右键,创建新项。在新项里面分别创建一个CPP文件和一个头文件。

4)得到如下的两个文件:起什么名字并不重要

5)以下是2个文件的代码:DLL的生成要说起来也一大堆的知识,我这里简单的说一下,dll的使用和生成用的宏不同,上面的代码主要是区分在不同环境中该使用那个宏,如果不理解就不要管了,你们只需要改最下面的哪个函数就行了。

头文件

///////////////////  DLL.h /////////////////////////////

  1. #if defined (EXPORTBUILD)
  2. # define _DLLExport __declspec (dllexport)
  3. # else
  4. # define _DLLExport __declspec (dllimport)
  5. #endif
  6. extern "C"  int _DLLExport MyADD(int x,int y);

代码文件

//////////////////   DLL.cpp ////////////////////////////

  1. //宏定义
  2. #define  EXPORTBUILD
  3. //加载头文件
  4. #include "DLL.h"
  5. //设置函数
  6. int _DLLExport MyADD(int x,int y)
  7. {
  8. return x+y;
  9. }

这样我们就生成了一个MyAdd()函数,传入两个数就会返回它们的和。 然后编译这个程序,会出现下面的对话框,那就证明你成功了!然后再把这个DLL文件放在你的unity工程的assert的Plugins(如果没有这个文件夹就手动创建一个)。

6) 在unity中创建一个C#脚本,调用我们刚刚生成的dll,在这里我们的DLL名字就叫DLL,所以写的是[DllImport ("DLL")] ,如果你的名字是Test.dll,那就写[DllImport ("Test")]

写一个GUI按钮上显示运行的结果。

[csharp] view plaincopy
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Runtime.InteropServices;
  4. public class NewBehaviourScript : MonoBehaviour {
  5. [DllImport ("DLL")]
  6. private static extern int MyADD(int x,int y);
  7. int i = MyADD(5,7);
  8. // Update is called once per frame
  9. void Update () {}
  10. void OnGUI()
  11. {
  12. GUI.Button(new Rect(1,1,200,100),"this DLL  i = 5+7, i is '"+i+"'");
  13. }
  14. }

运行通过就可以在界面上看到

7)输出unity项目exe到目录,然后在目录中也添加Plugins目录,把DLL文件也考进去,然后点运行,呵呵 成功了吧!

以上是unity 输出exe到win32系统的情况,下来看一看如何在其他平台上调用DLL。

Unity3d 调用C++的DLL的更多相关文章

  1. 调用Interop.zkemkeeper.dll无法使用解决方案

    调用Interop.zkemkeeper.dll无法使用 已经注册dll成功但是还是报错 检索 COM 类工厂中 CLSID 为 {00853A19-BD51-419B--2DABE57EB61F} ...

  2. c# 传递Null的string值导致的调用C++的dll报错 Attempted to read or write protected memory.

    c# 调用C++的dll报错 Attempted to read or write protected memory:   原因是:c# 传递Null的string值导致的,将Null改为string ...

  3. Unity3d调用iOS陀螺仪

    How to write gyroscope controller with Unity3d http://blog.heyworks.com/how-to-write-gyroscope-contr ...

  4. Node调用C++(dll)

    最近开始搞毕设了,打算用自己拿手的js来搞,但是仿佛入坑了,Node还不是很熟.总之,兵来将挡,水来土掩嘛,带着问题学习才是最高效的. 折腾1:Node 调用 C++ 刚开始,虽然我老师把dll文件给 ...

  5. golang调用c++的dll库文件

    最近使用golang调用c++的dll库文件,简单了解了一下,特作此笔记:一.DLL 的编制与具体的编程语言及编译器无关 dll分com的dll和动态dll,Com组件dll:不管是何种语言写的都可以 ...

  6. vs2010下C++调用lib或dll文件

    注: DLL:表示链接库,包含dll,lib文件: dll: 表示my.dll文件 lib: 表示my.lib文件 C++ 调用.lib的方法: 一: 隐式的加载时链接,有三种方法 1  设置工程的 ...

  7. paip.java c# .net php python调用c++ c dll so windows api 总结

    paip.java c# .net  php python调用c++ c dll so windows api 总结 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来 ...

  8. c++builder调用VC的dll以及VC调用c++builder的dll

    解析__cdecl,__fastcall, __stdcall 的不同:在函数调用过程中,会使用堆栈,这三个表示不同的堆栈调用方式和释放方式. 比如说__cdecl,它是标准的c方法的堆栈调用方式,就 ...

  9. LabView调用C#混合模式dll

    在一些特定要求下,我们的C#可能需要制作dll给LabView进行调用,并且我们不能够保证C#的程序是完全自己写而不调用第三方的dll库.很多时候我们需要使用诸如Sqlite.Net.AForge.N ...

随机推荐

  1. JavaScript类型检测, typeof操作符与constructor属性的异同

    *#type.js function Person(name, age) { this.name = name; this.age = age; } var d = {an: 'object'}; v ...

  2. MVVM - 基础介绍

    MVVM模式:把页面UI和后台逻辑分开,这样做的好处是能使你的程序更容易测试,维护和改进.

  3. 【高性能服务器】Tomcat剖析

    引言 Tomcat是一个流行的servlet容器,对于开发人员来说整体和容器打交道有必要花一些时间爱你了解其内部结构.本文将从一下几个方面来剖析其内部结构. 整体结构 连接器 初始化过程 如何处理一个 ...

  4. netbeans环境中使用maven搭建jsf、primefaces工程

    新建maven工程,选择web工程 增加jsf框架,加入primefaces 部署到服务器,在浏览器中打开页面,这是primefaces框架的页面. 此时工程web目录下有如下文件 web.xml文件 ...

  5. 【自用】爬虫配置XML时拼接URL中文转Unicode问题(例如北京转成%u5317%u4EAC)

    <var-def name="regionUnicode"> <while condition="true" index="s&qu ...

  6. 牛客_剑指offer_重建二叉树,再后续遍历_递归思想_分两端

       总结:    重建二叉树:其实就是根据前序和中序重建得到二叉树,得到后续,只要输出那边设置输出顺序即可 [编程题]重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的 ...

  7. 国外一些知名ASP.Net开源CMS系统

    1.Ludico Ludico是C#编写的居于ASP.NET 2.0的Portal/CMS系统.它的模块化设计是你可以按照你希望的使用或开发网站功能.它里面有高级的用户管理,一个所见即所的(WYSIW ...

  8. JavaScript生成GUID的多种算法小结

    全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) . GUID是一种由算法生成的二进制长度 ...

  9. UITableViewCell左滑的时候添加多个按钮的方法(iOS8+)以及UIRefreshControl(iOS6+)的使用。

    之前想在cell左滑的时候添加更多的按钮而不是只有‘删除’按钮如下所示,貌似不是一件简单的事.但是现在只要实现几个方法就行了. 代码写的比较垃圾,重在理解这个知识.. . 具体代码: // //  T ...

  10. UITableViewCell和UITableViewHeaderFooterView的重用

    不管是系统自带的还是自定义的UITableViewCell,对于它们合理的使用都是决定一个UITableView的性能的关键因素.应该确保以下三条: UITableViewCell的重复利用:首先对象 ...