出于代码保密、使用原生Win32或调用第三方库等各种原因,在Unity3d项目中是有对dll使用的需要的,这周弄了一段时间,在这里做个总结。
其实如果细心的人会发现,在Unity3d官方文档里面是有提到这个话题的,这里面我简单列举一下规则吧。
Using Mono DLLs in a Unity Project
file:///D:/Program%20Files%20(x86)/Unity/Editor/Data/
Documentation/Documentation/Manual/UsingDLL.html
在这两篇文档里面对于一些基本内容介绍的算是比较详细了,关于Unity3d dll编写的几个注意事项:
1. extern "C" 必须采用C方式的函数名导出
In general, plugins are built with native code compilers on the target platform. Since plugin functions use a C-based call interface, you must avoid name mangling issues when using C++ or Objective-C.
2. 生成的dll必须放在Assets/Plugins文件夹下
,务必别弄错放在/Managed下了
3. 在自己开始动手写自己的动态链接库、或调用别的链接库时,最好事先测试下当前环境是否正确,比如,写个简单的函数,验证并在Unity调用看看是否正确。
C++ 建立dll空项目AngelGUI
"add.h"
#if defined (EXPORTBUILD)
# define _DLLExport __declspec (dllexport)
# else
# define _DllExport __declspec (dllimport)
#endif
extern "C" int _DLLExport add(int x, int y);
"add.cpp"
#define EXPORTBUILD
#include "add.h"
int _DLLExport add(int x, int y)
{
return x+y;
}
将生成的Dll放在Unity工程Assets/Plugins/文件夹下,然后在C#脚本中使用如下方式声明,然后在其它地方调用,查看输出结果。
[DllImport("AngelGUI")]
static extern int add(int x, int y);
Note: 对于Unity输出的exe程序,想通过修改窗口的Window Style来达到Resizable的目的,这样大可不必,因为在Unity里面本身就提供了选项,Edit -> Project Settings -> Player -> Resolution and Presentation ---Resizable Window Toggle