unity中调用dll文件总结

unity中调用dll文件总结

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

一、调用c#中的dll文件

 

1.1封装dll文件

 

首先新建一个项目

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

 

unity中调用dll文件总结_第1张图片

 

 

 

 
  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

unity中调用dll文件总结_第2张图片
.

 

unity中调用dll文件总结_第3张图片

 

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

unity中调用dll文件总结_第4张图片

 

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

unity中调用dll文件总结_第5张图片

unity中调用dll文件总结_第6张图片

 

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

unity中调用dll文件总结_第7张图片

 

 

在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);

 

 

 

选择源文件,如下图所示

unity中调用dll文件总结_第8张图片unity中调用dll文件总结_第9张图片unity中调用dll文件总结_第10张图片

 

 

选择添加后,在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.

你可能感兴趣的:(知识理解)