DLL接口里返回CHAR*的问题
需要给别人提供一个DLL,返回的类型是CHAR*,尝试过以下几种方法
1定义一个返回变量char cres[1024]返回cres即可,但是这样一量返回的长度超过1024就会切断
2使用AnsiString(UnicodeString)变量sRes,返回c_str(t.str)也可以,但是这样的方法,接收的人经常后面就会少几位,请问怎么解决好呢?此种方法怎么样才能让后面不少?
[解决办法]
char* 就得用c_str();
或者在你的函数里这样改下试试
char buf[2048];
return buf
返回char*真麻烦
[解决办法]
1、Dll中定义一个全局变量 AnsiString PublicBuff, 返回PublicBuff.c_str()即可.
如果不是全局变量,接收的人少几个字节很正常。但因为是全局变量,也就不支持多线程了。
2、支持多线程的话,需要规范,即规范好谁分配内存,谁释放。可以在DLL中放一个接口,deletePCHARinDLL(char *),由调用者负责delete,即谁调用,谁调用deletePCHARinDLL来清场。
3、另一种规范是,DLL标明用户必须自行保障有足够的空间。使用者可以先调用DLL中的函数,取得字串长度,再由使用者申请内存。
你说的情况,只能是第1种,DLL中用全局变量或局部静态变量来实现。