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). 其中要使用两个未公开的 ...
随机推荐
- 探讨android更新UI的几种方法
作为IT新手,总以为只要有时间,有精力,什么东西都能做出来.这种念头我也有过,但很快就熄灭了,因为现实是残酷的,就算一开始的时间和精力非常充足,也会随着项目的推进而逐步消磨殆尽.我们会发现,自己越来越 ...
- MySQL子查询的优化
本文基于MySQL5.7.19测试 创建四张表,pt1.pt2表加上主键 mysql> create table t1 (a1 int, b1 int); mysql> create ta ...
- 64位平台C/C++开发注意事项
在http://www.viva64.com/en/l/上例出了28个在64位平台上使用C/C++开发的注意事项,对于进入64位时代的程序员应该去看看这28个事项,这些英文读物对于有C/C++功底的朋 ...
- Linux下查找指定日期的文件
一.背景 Linux服务器的一个目录里,每天产生海量的文件.为了防止磁盘被写满. 决定每天删除部分老文件.OK,问题来了,如何过滤出指定日期的文件? 二.强大的Linux 一行代码搞定: ls --f ...
- 【python】Python 资源大全中文版
申明:感谢原作者的整理与分享,本篇文章分享自:https://www.jianshu.com/p/9c6ae64a1bd7 GitHub 上有一个 Awesome - XXX 系列的资源整理,资源非常 ...
- iOS基础总结
面试题预览: 1.KVO实现原理? 2.说说你理解的埋点? 3.消息转发机制原理? 4.说说你理解weak属性? 5.假如Controller太臃肿,如何优化? 6.项目中网络层如何做安全处理? 7. ...
- 【Unity】3.1 利用内置的3D对象创建三维模型
分类:Unity.C#.VS2015 创建日期:2016-04-02 一.基本概念 Unity已经内置了一些基本的3D对象,利用这些内置的3D对象就可以直接构建出各种3D模型(当然,复杂的三维模型还需 ...
- HTML5学习笔记(五):CSS基础
CSS 指层叠样式表 (Cascading Style Sheets),在网页中用来定义网页的元素如何进行显示. CSS 对大小写不敏感.不过存在一个例外:如果涉及到与 HTML 文档一起工作的话,c ...
- 转:Git: git stash 用法小结
一.应用场景 综合下网上的介绍和资料, git stash (git储藏)可用于以下情形: 发现有一个类是多余的,想删掉它又担心以后需要查看它的代码,想保存它但又不想增加一个脏的提交.这时就可以考虑 ...
- 【小白的CFD之旅】22 好网格与坏网格
网格疏密网格形状其他的一些问题小白的总结郑重申明 网格的作用如此重要,以至于小白纠结了很久.小白知道网格划分过程很大程度上受制于计算资源的限制,但小白还是不太明白,如果计算资源非常充足,不用顾忌资源限 ...