C#生成DLL,在Unity中导入/调用DLL
网上搜了一些DLL的创建、编写、使用的学习资料,感觉比较的凌乱。或是复杂抽象,或是关键地方一笔带过,不是很适合萌新。于是决定还是图文记录一下该过程,尽量精简而又明确。
学习资料:
- https://docs.unity3d.com/Manual/UsingDLL.html
- http://www.cnblogs.com/cuishao1985/archive/2009/08/11/1543891.html
创建DLL文件
打开Visual Studio,新建一个项目,选择模板Visual C#的类库,.Net Framework选择3.5版本(Unity5使用的Mono版本对应.net framework 3.5),如下图。

新建一个DLLProjectClass类,编写类的方法,如下。
namespace TestDLLProject
{
public class DLLProjectClass
{
// 用本类对象来调用的普通方法
public string GetStr(string str)
{
return "调用了DLL中的方法!输入的str = " + str;
} // 静态方法
public static int GetInt(int num)
{
return (num + );
}
}
}
在Visual Studio的【解决方案资源管理器】中右键点击该项目,点击【生成/重新生成】,或者直接整个【重新生成整个方案】,即可编译该项目。

之后会在项目路径下生成bin文件夹,生成的DLL文件就在bin\Debug文件夹下。

在其他VS项目中使用DLL
再在Visual Studio新建一个项目,在【解决方案资源管理器】中右键点击该项目的【引用】,点击【添加引用】。

弹出【引用管理器】窗口后,点击右下角的【浏览】,找到刚才生成的DLL的文件夹路径,添加DLL进项目。

之后就能在【引用】中看到该DLL了。

最后在该项目中使用DLL中的方法。代码如下。
public void Initialize()
{
int a = ;
int b = TestDLLProject.DLLProjectClass.GetInt(a);
Console.WriteLine("调用DLL的静态方法后, b = " + b.ToString()); TestDLLProject.DLLProjectClass c = new TestDLLProject.DLLProjectClass();
string result = c.GetStr("啦啦啦");
Console.WriteLine(result);
}
输出的结果:

在DLLProjectClass按下F12可以看到该DLL的内容如下。只有方法签名,没有方法的实现细节。

在Unity项目中使用DLL
Unity项目中想要添加该DLL,跟上文的在其他VS项目中添加DLL有点不一样。
编辑Unity项目的C#脚本时,在Visual Studio的【解决方案资源管理器】中,右键【引用】,会发现根本没有【添加引用】这一项!

回到Unity编辑器,在Assets文件夹下新建一个Plugins文件夹,在资源管理器中把DLL文件复制到Plugins目录下。(其实在Assets文件夹下任意地方都行,看别人的案例习惯放在Assets/Plugins下)

再次回到Unity编辑器,等Unity编译好后,就能在Visual Studio中看到添加了该DLL的引用!

之后的调用DLL中的方法,就跟上文的差不多了。在Mono脚本中Start方法调用。代码如下。
public class TestDLL : MonoBehaviour {
void Start()
{
int a = ;
int b = TestDLLProject.DLLProjectClass.GetInt(a);
Debug.Log("调用DLL的静态方法后, b = " + b.ToString());
TestDLLProject.DLLProjectClass c = new TestDLLProject.DLLProjectClass();
string result = c.GetStr("啦啦啦");
Debug.Log(result);
}
}
输出如下:

C#生成DLL,在Unity中导入/调用DLL的更多相关文章
- 在Delphi中静态调用DLL
在Delphi中静态调用DLL top 调用一个DLL比写一个DLL要容易一些.首先给大家介绍的是静态调用方法,稍后将介绍动态调用方法,并就两种方法做一个比较.同样的,我们先举一个静态调用的例子. u ...
- 获取DLL的文件路径以及调用DLL的文件路径
如何在DLL中,获取DLL本身的路径以及调用DLL的文件的路径呢?主要通过GetModuleFileName(HMODULEhModule,LPTSTR lpFilename,DWORD nSize) ...
- 在XP系统中自带的 msvcrt.dll 和 Vista 中的 msvcrt.dll 版本不同,导致抛出的异常不同
然而,在XP系统中,系统自带的 msvcrt.dll 和 Vista 中的 msvcrt.dll 版本不同, 并没有这个 _except_handler4_common ,结果就出现了启动程序时,遇到 ...
- 生成Dll在Unity中使用
我发现很多大佬,插件开发者以及Unity官方都在用Dll来保证既可让使用者正常使用也可有效防止使用者看到自己写的代码 版本说明 Visual Studio版本:2019 16.10.3 Unity版本 ...
- C# 中静态调用C++dll 和C# 中动态调用C++dll
在最近的项目中,牵涉到项目源代码保密问题,由于代码是C#写的,容易被反编译,因此决定抽取核心算法部分使用C++编写,C++到目前为止好像还不能被很好的反编译,当然如果你是反汇编高手的话,也许还是有可能 ...
- C++中如何调用DLL文件
一.动态链接库简介 动态库链接库英文位DLL,是Dynamic Link Library的缩写形式,DLL不是可执行文件.动态链接提供了一种方法,使进程可以调用不属于其可执行文件代码的函数.函数可执行 ...
- VS2010编写动态链接库DLL及单元测试用例,调用DLL测试正确性
转自:http://blog.csdn.net/testcs_dn/article/details/27237509 本文将创建一个简单的动态链接库,并编写一个控制台应用程序使用该动态链接库,该动态链 ...
- C#中动态调用DLL动态链接库
其中要使用两个未公开的Win32 API函数来存取控制台窗口,这就需要使用动态调用的方法,动态调用中使用的Windows API函数主要有三个,即:Loadlibrary,GetProcAddress ...
- C#中动态调用DLL动态链接库(转)
本来是想实现控制台程序运行时自动全屏,但是只找到VC下的实现方法(http://www.vckbase.com/bbs/prime/viewprime.asp?id=347). 其中要使用两个未公开的 ...
随机推荐
- [aaronyang] nodejs学习-mongodb[1]
1.资源提供与安装(ayjs.net) 学习说明:nodejs还是在非windows环境下操作好,所以一切还是 当前时间:2014年12月06日aaronyang 官网地址:www.mongodb.o ...
- MySQL -- 外键创建失败
使用show engine innodb status\G 查看数据库状态的时候,发现以下报错信息: ------------------------ LATEST FOREIGN KEY ERROR ...
- xtrabackup 源码安装
安装依赖包:这些依赖包必须要先安装好 # yum install cmake libaio-devel ncurses-devel bzip2-devel libxml2-devel libgcryp ...
- nginx+php-fpm性能参数优化原则
1.worker_processes 越大越好(一定数量后性能增加不明显) 2.worker_cpu_affinity 所有cpu平分worker_processes 要比每个worker_pro ...
- mysql 5.5数据库主从配置步骤详解
上次给大家介绍了mysql 5.1主从搭建配置教程,这次我们来实现mysql 5.5的主从复制,其实大体上配置是差不多的,只有点细微的差别. 系统:centos 5.x 需要的软件包:mysql-5. ...
- TCP握手和传输的一次观察
1. TCP三次握手SYN ---> <--- SYN,ACKACK ---> 花费时间:386.718-385.784=0.934ms 2.正常的消息交互2.1. 服务器主动校验 ...
- Java 8 Optional In Depth
OptionalBasicExample.java package com.mkyong; import java.util.Optional; public class OptionalBasicE ...
- Java – Stream has already been operated upon or closed
Java – Stream has already been operated upon or closed package com.mkyong.java8; import java.util.Ar ...
- 如何在Android Studio中添加注释模板信息?
如何在Android Studio中添加注释模板信息? 在开发程序的时候,我们一般都会给文件自动添加上一些关于文件的注释信息,比如开发者的名字,开发的时间,开发者的联系方式等等.那么在android ...
- java、oracle对CLOB处理
oracle CLOB字段转换位VARCHAR 1.实际上处理CLOB字段的时候,直接TO_CHAR,当长度超过4000的时候,会报错,提示列被截取: CLOB转varchar2:select to_ ...