1.c++编写dll给unity使用的禁忌; 返回值不能是字符串,char*,获取其它的, 这样会搞死unity的内存。
正常写法:
- .h文件
#ifdef DLL1_EXPORTS
#define NDDATASDK_API extern"C" _declspec( dllexport )
#else
#define NDDATASDK_API extern"C" _declspec(dllimport)
#endif
NDDATASDK_API void necall(char* str, char* outdata);//返回接口,使用上要注意线程安全
- .app文件
void necall(char* str1, char* outdata) {
string str = str1;
mondebug(str);
mondebug(str.data());
const char* output1 = str.data();
strcpy(outdata, output1);
}
- c#文件
[DllImport("dll1")]
private static extern void necall(string a,StringBuilder b);
调用方法
StringBuilder b = new StringBuilder();
necall("dsadsdsds", b);
Debug.LogError("########22222###### " +b);
2.c++ 导出给unity的dll时,不要添加宏定义,如: LIBNDDATASDK_EXPORTS
3.dll导出和lib导出有差异
#ifdef LIBNDDATASDK_EXPORTS
#define NDDATASDK_API extern"C" _declspec( dllexport )
#else
#define NDDATASDK_API extern"C" _declspec(dllimport)
#endif
NDDATASDK_API int CreateDll1New(int a,int b);//返回接口,使用上要注意线程安全
而lib导出:
int CreateDll1New(int a,int b);//返回接口,使用上要注意线程安全