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). 其中要使用两个未公开的 ...
随机推荐
- list、map、数组 转换
list,set,map,数组间的相互转换1.list转setSet set = new HashSet(new ArrayList()); 2.set转listList list = new Arr ...
- 企业内知识库wiki所存在的问题
相信很多公司都利用开源的wiki web app搭建了自家的内部wiki服务,比如使用media Wiki, Gollum, doku wiki, jsWiki等 但是,真正可用的企业wiki系统却没 ...
- 适合移动端与PC端的 CSS Reset - m_base.css
文章来源:http://www.cnblogs.com/HCJJ/p/6399185.html 具体代码 @charset "utf-8"; html { -ms-text-siz ...
- Effective C++ 34
34.将文件间的编译依赖性降到最低. 对于一个大型程序,其结构是错综复杂的.当你对一个类进行一些改动时.改动的不是接口,而是类的实现,即仅仅是一些细节部分,但又一次生成程序时,所实用到这个类的的文件都 ...
- python os.chdir() 用法
概述 os.chdir() 方法用于改变当前工作目录到指定的路径. 语法 chdir()方法语法格式如下: os.chdir(path) 参数 path -- 要切换到的新路径. 返回值 如果允许访问 ...
- C++生成斐波拉其数列
该方法作为一种演示功能左右,运行较慢. #include <iostream> using namespace std; class Fibonacci{ public: int a, b ...
- IOS使用AVAudioPlayer播放mp3歌曲文件并监听来电打断
本实例实现了AVAudioPlayer播放mp3歌曲文件,实现了播放.暂停.继续操作,音乐音量控制.播放进度显示,同时监听来电打断事件 一.控件初始化 - (void)viewDidLoad { [s ...
- C语言:存取结构体成员的点运算符(.)和箭头运算符(->)的区别
转自:http://blog.csdn.net/taric_ma/article/details/7397362 一直以为这两个是没有什么区别的,可以相互替换,今天又翻了一下<C语言核心技术&g ...
- Robolectric使用教程
转载请标明出处:http://blog.csdn.net/shensky711/article/details/53561172 本文出自: [HansChen的博客] 概述 怎样使用 为项目加入依赖 ...
- 在sublime text3中安装git插件
使用Package Control组件(推荐),打开install package控制台后,直接输入git就可以安装git插件. 这个时候Sublime Text只是安装了git插件,但还不能使用gi ...