Unity3D教程:调用C++中DLL文件

Posted 小小姑娘很大

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3D教程:调用C++中DLL文件相关的知识,希望对你有一定的参考价值。

1.创建DLL

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

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

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

Unity3D教程:调用C++中DLL文件

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

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

Unity3D教程:调用C++中DLL文件

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

Unity3D教程:调用C++中DLL文件

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

Unity3D教程:调用C++中DLL文件

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

头文件

  

1

    #if defined (EXPORTBUILD) 

2

    # define _DLLExport __declspec (dllexport) 

3

    # else 

4

    # define _DLLExport __declspec (dllimport) 

5

    #endif 

6

7

    extern "C"  int _DLLExport MyADD(int x,int y); 

代码文件

  

01

 //宏定义 

02

    #define  EXPORTBUILD 

03

04

    //加载头文件 

05

    #include "DLL.h" 

06

07

    //设置函数 

08

    int _DLLExport MyADD(int x,int y) 

09

     

10

        return x+y; 

11

     

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

Unity3D教程:调用C++中DLL文件

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

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

  

01

    using UnityEngine;   

02

03

    using System.Collections;   

04

05

    using System.Runtime.InteropServices;   

06

07

    public class NewBehaviourScript : MonoBehaviour  

08

09

          [DllImport ("DLL")]   

10

          private static extern int MyADD(int x,int y);   

11

          int i = MyADD(5,7);    

12

        // Update is called once per frame 

13

        void Update ()  

14

        void OnGUI()  

15

         

16

            GUI.Bu

Unity3D教程:调用C++中DLL文件

  

1

tton(new Rect(1,1,200,100),"this DLL  i = 5+7, i is '"+i+"'"); 

2

         

3

   

4

5

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

Unity3D教程:调用C++中DLL文件

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

通过在 C++ 接口周围创建 C 包装器,在 FORTRAN 中调用 C++ dll 文件 [关闭]

【中文标题】通过在 C++ 接口周围创建 C 包装器,在 FORTRAN 中调用 C++ dll 文件 [关闭]【英文标题】:Calling a C++ dll file in FORTRAN, by creating C wrapper around C++ interface [closed] 【发布时间】:2016-03-22 14:01:01 【问题描述】:

我的任务是在 FORTRAN 中开发一段代码,该代码将调用用 C++ 编写的 .dll 文件并使用 dll 文件中的子例程进行计算。 我已经向 .dll 文件的开发人员发送了有关这种实现可能性的邮件。下面是给开发者的回复

这个接口不可能直接从 FORTRAN 调用。 可以围绕 C++ 类接口创建标准 C 包装器,然后从 FORTRAN 调用标准 C(使用可以链接和调用 Visual Studio .dll 的编译器)。"

我自己是使用 dll 的业余爱好者,任何帮助(教程链接、示例代码)将不胜感激。

到目前为止的状态:由于我没有dll文件的源代码,所以我执行了dumpbin并提取了函数的名称。

【问题讨论】:

这里有一个完整的标签 fortran-iso-c-binding 用于连接 Fortran 和 C。C++ 只是在其中添加了 extern "C"。该标签中也有许多关于 C++ 的问题和答案。从您的问题中不清楚 Fortran 是否调用 C++ 或相反或两者兼而有之。 @VladimirF 它说“在 FORTRAN 中开发一段代码,它将调用用 C++ 编写的 .dll 文件并使用 dll 文件中的子例程进行计算。” ,所以我很清楚他想从他的 fortran 代码中调用一个 C++ 函数。我的问题是,你能用 C 语言创建你的主项目,然后将 C++ dll 和他的 Fortran 子程序作为库调用吗? @Slex 好的,当我读到它时我迷路了。关于你的另一点,你为什么要引入这样的复杂性? 【参考方案1】:

您创建了一系列 C++ 函数,每个函数都声明为 extern "C",以便从 Fortran 中调用。要构建它们,您需要 DLL 的头文件;包含它,然后编写必须编写的任何 C++ 代码,以从一个简单的、fortran 可调用的函数映射到 DLL 所宣传的 API。

【讨论】:

更新。我使用 dumpbin 命令创建了一个 .lib 文件,并在 C++ 中创建了一个静态库项目,创建了一个名为“extern.hpp”的文件,在函数名称之前声明了 extern "C"。尝试编译它们,确实它们被编译了。但是没有生成 .lib 文件。我做错了什么,还是应该完全采用全新的方法?

以上是关于Unity3D教程:调用C++中DLL文件的主要内容,如果未能解决你的问题,请参考以下文章

unity3d导入c ++ dll,用于通过引用方法传递

通过在 C++ 接口周围创建 C 包装器,在 FORTRAN 中调用 C++ dll 文件 [关闭]

如何从 c++ 项目中调用用 c# 创建的 dll 文件? [复制]

C#怎么调用C++的dll?

C#导入c++ dll报找不到dll文件 masm32调用c++类库

c++调用dll导出函数