Unity C# 调用 C++ DLL 并在 DLL 中调用 C# 的回调函数
Unity C# 调用 C++ DLL 并在 DLL 中调用 C# 的回调函数~~~ 呵呵... 看着有点晕..
再解释一下就是 在Unity中 使用 C# 调用 C++ 写的 DLL, 但是在这个 C++ 的 DLL 的某一个方法中,用到的 回调函数. 也就是需要 在 C# 中传入一个与 C++中签名相同的 方法的问题.
一般在 C++ 中 使用 这种文件 创建一个函数的指针 :
// 开辟内存空间的函数指针 (float *& 为float型指针的引用)
typedef void (*AllocSpace)(int,int,int,float*&,float*&,int*&);
// 调用C#中的函数,根据得到的数据,创建模型
typedef void (*BuildMesh)(void);
在 C# 中 需要定义相当签名的 delegate :
[UnmanagedFunctionPointer(System.Runtime.InteropServices.CallingConvention.Cdecl)]
delegate void AllocSpace(int vc, int nc, int fc, ref System.IntPtr vp, ref System.IntPtr np, ref System.IntPtr fp);
[UnmanagedFunctionPointer(System.Runtime.InteropServices.CallingConvention.Cdecl)]
delegate void BuildMesh();
** 注意: 这里的红色部分的属性,是指定了这个方法的调用规则, 这个必须有. 不然调用规则不一至. 程序直接 Crash掉! **
这里是调用 DLL 中的那个用到 回调函数的 方法:
[DllImport("FBX_Importer")]
extern static void LoadFBX(System.IntPtr fi, System.IntPtr filename, AllocSpace allocSpace, BuildMesh buildMesh);
这里是 使用这个 方法:
LoadFBX(FBXImporter, Marshal.StringToHGlobalAnsi(fileName), MyAllocSpace, MyBuildMesh);