简单介绍:
调用dll分为两类, 一类是托管dll 托管代码: 是由公共语言运行库(CLR)执行的代码,而不是由操作系统直接执行。本地代码经过两次编译,第一次将源代码编译成中间代码(MSIL,MicrosoftIntermediate Language),第二次由.net中的CLR将中间代码编译成机器代码。程序实际上是被“托管”在公共语言运行库中。随着程序集的运行,公共语言运行库会持续地提供各种服 务,例如内存管理、安全管理、线程管理等等。 引用方法: “在解决方案管理器” - “解决方案”(或项目) 中的任意地方, 右键“添加引用”,“浏览”,选择你需要调用的dll文件,确定即可,该dll会自动复制到bin目录,打包时也会自动复制到你发布的地方。 调用方法: 如果有命名空间则引入命名空间,比如你的.dll里面,是a命名空间,有一个b类,然后有一个无参数静态方法c那么调用方法就是a.b.c(),跟你普通的使用类是一样的 另一类就是非托管类dll,也叫本地代码。 具体引用方法和调用方法如下。
引用方式:
dll长下面这样。到时候会收到下面截图中一样的3个文件: 然后打开.h文件,长下面这样: 注意JXSY,它就是你要引用的dll名字。然后把.dll文件复制到unity内随意一个文件夹内。再在unity内,随意新建一个C#类,在里面加入以下代码。 1.双引号内是你添加的dll名称, 2.函数是你要用的函数的名称,再加上private static extern , 3.参数类型,char *类参数可以换成string 类的参数,如果报错可以在string参数前添加 [MarshalAs(UnmanagedType.LPStr)] 通过MarshalAs特性告诉.NET应该封送成什么类型给非托管代码去玩。
[DllImport("JXSY")]
private static extern void Chushihua(string shiyanbianhao);
类前添加空间名称,你不添加,也会自动提示
using System.Runtime.InteropServices;
像下面这样的值传递参数,需要用到ref
extern "C" JXSY void ShuzhiSet(char *name, double lalalain);
如下图所示方式在参数前添加ref。
[DllImport("JXSY")]
private static extern void ShuzhiSet([MarshalAs(UnmanagedType.LPStr)] string name, ref double lalalain);
调用方式:
使用的时候如下图方式使用就可以了。
|