c++编写dll给unity使用的禁忌,小记

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);//返回接口,使用上要注意线程安全

你可能感兴趣的:(c#,unity,c++)