当前位置:   article > 正文

unity中调用dll文件总结_unity调用dll

unity调用dll

unity中调用dll文件总结

根据收集的资料,对unity中调用dll文件进行总结,目前常用的两种,在给出vs中封装dll文件的步骤。

一、调用c#中的dll文件

 

1.1封装dll文件

 

首先新建一个项目

然后创建一个类库,例如命名为Csharp

 

 

 

 

 
  1. using System;

  2. using System.Collections.Generic;

  3. using System.Linq;

  4. using System.Text;

  5. using System.Threading.Tasks;

  6.  
  7. namespace Csharp

  8. {

  9. public class Class1

  10. {

  11. public static string getName(string name)

  12. {

  13. return name;

  14. }

  15. }

  16. }

 

然后编译成dll文件,名字为Csharp.dll

1.2.在unity中使用自定义的dll组件

在unity中创建一个Plugins文件夹,所有的外部引用的dll组件必须要放在这个文件下,才能被using。如果是C#封装的dll,就用 using的方式引用,如果是C++的dll,就DllImport[""]的方式来添加对dll的引用。然后我在C#脚本中用这个dll

 

 
  1. using UnityEngine;

  2. using System.Collections;

  3. using Csharp; //引用c#生成的dll文件,namespace的名字

  4.  
  5. public class TestDllOne : MonoBehaviour {

  6. // Use this for initialization

  7. void Start () {

  8.  
  9. }

  10.  
  11. // Update is called once per frame

  12.  
  13. void OnGUI()

  14. {

  15. if (GUILayout.Button("test c# dll"))

  16. {

  17. Debug.Log(Class1.getName("hello world "));

  18. }

  19.  
  20. }

 

二、调用c++中的dll文件

在本文中用VS2013进行 C++创建DLL图解

1.创建项目: Win32->Win32项目,名称:MyDll


.

 

 

单击下一步后选择如下图所示

 

单击完成后,右击选择头文件-->添加 ----> 新建项如下图操作

 

选择头文件并且命名,例如TestDll.h,命名后单击添加

 

 

在TestDll.h 头文件中写入代码如下

 

 
  1. # define _DLLExport __declspec (dllexport)

  2. # else

  3. # define _DLLExport __declspec (dllimport)

  4. #endif

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

 

 

 

选择源文件,如下图所示

 

 

选择添加后,在Test.cpp 源文件中写入代码如下

 

 
  1. //宏定义

  2. #define EXPORTBUILD

  3.  
  4. //加载头文件

  5. #include "TestDll.h"

  6.  
  7. //设置函数

  8. int _DLLExport MyADD(int x, int y)

  9. {

  10. return x + y;

  11. }


编译后将生成的MyDll.dll 文件导入unity中的Plugins文件中

 

如果是C++的dll,就DllImport[""]的方式来添加对dll的引用

 

 
  1. using UnityEngine;

  2. using System.Collections;

  3. using System.Runtime.InteropServices; //调用c++中dll文件需要引入

  4. public class TestDllOne : MonoBehaviour {

  5. [DllImport("MyDll")]

  6. static extern int MyADD(int x , int y);

  7.  
  8. // Use this for initialization

  9. void Start () {

  10.  
  11. }

  12.  
  13. // Update is called once per frame

  14.  
  15. void OnGUI()

  16. {

  17. if (GUILayout.Button("test c++ dll"))

  18. {

  19. int i = MyADD(12 , 23);

  20. Debug.Log("sum = :" + i.ToString());

  21. }

  22. }

  23.  
  24.  
  25. }

 

 

使用c#生产的dll会有如下问题:

 

Running into Issues?:

Internal compiler error ... System.Reflection.ReflectionTypeLoadException

 

If you are getting an error similar to Internal compiler error. System.Reflection.ReflectionTypeLoadException in Unity when trying to build your project; You need to change the targeted .NET version of your C# file to something like .NET 3.5.

  • Right click on your C# project and go to Properties
  • In the Application tab, change the Target Framework to .NET Framework 3.5
     

Failed to load ... expected 64 bit architecture (IMAGE_FILE_MACHINE_AMD64), but was IMAGE_FILE_MACHINE_I386.

If you are getting this error, you probably need to recompile your libraries for x64 platform (64 bit).

In Visual Studio, go to the properties of your project, then at the top click the "Configuration Manager..." button. In the table, under the Platform column, change it to "x64" then recompile your project.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/88975
推荐阅读
相关标签
  

闽ICP备14008679号