zoukankan      html  css  js  c++  java
  • Unity3D中使用C#调用C++编写的DLL

    前言

    Unity3D是一款非常优秀的游戏引擎,可以使用C#作为脚本语言进行编程。但是有的时候我们需要运行一些第三方的程序,例如C++实现的一些算法。我们需要将C++的代码以DLL的形式嵌入到Unity3D的程序中。这时候就要用到C#调用C++ DLL的方法。本文给出一个最简单的调用方式,实现了一些简单数据类型的传递。

     

    1  C++中DLL的生成

    在Windows平台上,首先使用VisualStudio2013来创建一个C++的Win32控制台应用程序。工程名设置为TestDLL。


    在应用程序设置向导中,选择应用程序类型为DLL。


    由于我们使用的Unity3D分32位和64位,所以我们需要在配置管理器中设置与Unity一致的位数。我的Unity3D是64位的,所以我做了如下设置。


    然后将下面的代码粘贴到TestDll.cpp中。

    #include "stdafx.h"
    
    extern "C"_declspec(dllexport) void  fun0(int &a)
    {
    	a = 111;
    }
    extern "C"_declspec(dllexport) void  fun1(int *b)
    {
    	*b = 222;
    }
    
    extern "C"_declspec(dllexport) void  fun2(int c[])
    {
    	c[0] = 333;
    }
    
    extern "C"_declspec(dllexport) void  fun3(char *d)
    {
    	*d = 'B';
    }


    然后点击生成解决方案,就可以在“工程根目录x64Release”路径下看到生成的TestDll.dll。


    2  在Unity3D中调用C++的DLL

    创建一个新工程和一个新场景,并创建一个脚本UseDll.cs。脚本的内容如下:

    using UnityEngine;
    using System.Collections;
    using System.Runtime.InteropServices;
    
    public class UseDll : MonoBehaviour {
    
        [DllImport("TestDll")]
        private static extern void fun0(ref int a);
        [DllImport("TestDll")]
        private static extern void fun1(ref int b);
        [DllImport("TestDll")]
        private static extern void fun2(int[] c);
        [DllImport("TestDll")]
        private static extern void fun3(ref char d);
    
    	void Start () {
    
            //初始化a、b、c、d 几个数据
            int a = 0;
            int b = 0;
            int[] c=new int[5];
            for(int i=0;i<5;i++)
            {
                c[i] = -1;
            }
            char d = 'A';
            
    
            //调用dll中的函数,对数据进行修改
            fun0(ref a);
            Debug.Log(a);
            fun1(ref b);
            Debug.Log(b);
            fun2(c);
            Debug.Log(c[0]);
            fun3( ref d);
            Debug.Log(d);
    	
    	}
    
    	void Update () {
    	
    	}
    }


    将这个脚本绑定到摄像机上,并且要把上一步中生成的TestDll.dll拷贝一份放到“Unity工程根目录AssetsPlugins”目录下。默认的时候Assets下是没有Plugins文件夹的,需要自己创建。一切就绪后,可以运行程序,在控制台显示如下信息,表示C#中初始化的数据已经在C++的DLL中被修改,即C#成功调用了C++的DLL。


  • 相关阅读:
    NodeMCU快速上云集锦
    云数据库 MySQL 8.0 重磅发布,更适合企业使用场景的RDS数据库
    MySQL 8.0 技术详解
    为更强大而生的开源关系型数据库来了!阿里云RDS for MySQL 8.0 正式上线!
    阿里云CDN技术掌舵人文景:相爱相杀一路狂奔的这十年
    容器服务kubernetes federation v2实践五:多集群流量调度
    Helm V3 新版本发布
    Serverless助力AI计算:阿里云ACK Serverless/ECI发布GPU容器实例
    详解TableStore模糊查询——以订单场景为例
    洛谷P2727 01串 Stringsobits
  • 原文地址:https://www.cnblogs.com/yanhuiqingkong/p/7770060.html
Copyright © 2011-2022 走看看