一,C#调用 C/C++ 库函数
1,UNITY的C# VS工程常常打不开 属性页,右键工程无 【添加引用】项。原因是VS的自带工具【适用于UNITY的工具】导致的。
解决办法:VS-【工具】-【选项】-【适用于UNITY的工具】-【杂项】-【访问项目属性】改为true,然后重启VS, 就可以打开项目属性了
2,C#工程的属性页与C++相差很大,它没有文件目录的设置项,没有LIB文件的添加和目录项,因此,C#工程使用库文件只有一种方式:添加引用,
且C#只能引用DLL,不能引用LIB
3,添加引用时,C#工程一定要添加引用才能使用DLL,就算你的DLL在工程中任何位置不添加引用也不能用,这很明显,就像C++工程中不添加LIB及其目录则不能用一样
添加引用只是告诉IDE该到哪里去取这个DLL,
4,在代码中声明导出函数【注意导出函数必须是 static extern的】
[System.Runtime.InteropServices.DllImport("KERNEL32.DLL", EntryPoint="RtlZeroMemory")] public unsafe static extern bool ZeroMemory(byte* destination, int length);
关于静态链接库和动态链接库:
静态链接库只有一个.LIB文件,使用时 : 工程中添加.lib并指定lib目录,代码中包含.h或只接声明lib中的函数名然后使用
动态链接库可以只生成一个dll而不生成lib,这样使用时只能使用 系统函数loadlibary()来加载这个dll,并从中导出想要使用的函数。
动态链接库常用的使用方式是生成一个lib和一个dll,使用时 : 工程中添加.lib并指定lib目录,代码中包含.h或只接声明lib中的函数名然后使用
二,C#调用 C# 库
C#的库只有动态链接库DLL,且调用极为简单,只需要添加引用,然后在程序中像使用一个源码类那样使用它,不需要 DllImport标签来导入函数,示例如下:
//DLL,创建一个库工程,添加如下代码,编译生成了ClassLibaray1.DLL
namespace ClassLibrary1 { public class Class1 { public void Print(string s) { Console.WriteLine(">> {0}", s); } } }
//工程中添加引用,将ClassLibaray1.dll添加到工程中
//使用ClassLibaray1.DLL
using ClassLibrary1; namespace uselib { public class myclass { static void Main() { var osp = new sp1class(); osp.Print("10"); Class1 oc1 = new Class1(); oc1.Print("ddd"); } } }
另外参考:
1,将CS脚本打成DLL并在UNITY中使用
https://blog.csdn.net/qq_25210959/article/details/53285403
2,将UNITY 的DLL打进自己的DLL中?