char* 接收另外一个函数返回的问题

C++语言 码拜 9年前 (2016-06-02) 1197次浏览
dll中函数原型:
int DllReturn(char* cReturn)
{
for(int n=0; n<iATRLen; n++)  //
{
str.Format(“%02x”,reply.message.negativeReply.Data.bBody[n]);  //reply.message.negativeReply.Data.bBody[n]这个是另外一个执行语句中得到的比较长,就没写。strBack,和 str都是CString的全局变量
strBack += str;
}

cReturn=strBack.GetBuffer(strBack.GetLength());    //这里是能取得的。
return 0;
}
应用 工程中
char* cReceiveCmd;
cReceiveCmd=(char*)malloc(128);
DllReturn(cReceiveCmd);  //取得的为空的

解决方案

10

调用时传的是动态开辟字符指针,在int DllReturn(char* cReturn)内部应该是对cReturn指针的内容进行修改,而不是对这个形参的指向进行改变(也就是不能是cReturn=xxx),这样改变的只是形参cReturn的指向而已,外部实参cReceiveCmd并没有任何变化。
试试cReturn=strBack.GetBuffer(strBack.GetLength());这句改为strcpy(cReturn ,strBack.GetBuffer(strBack.GetLength()));

5

建议使用memcpy,指针是用于存放地址的,它不能直接做到把数据拷贝到指向的内存里;

5

cReturn这个指针变量本身是一个值传递.
cReturn=strBack.GetBuffer(strBack.GetLength());    //值传递, 这里是不会改变外部的.
需要修改成memcpy, 或 strcpy都行.
strcpy(cReturn, strBack.GetBuffer(strBack.GetLength())); //这里是修改了指针指向的内存, 这就是地址传递了

5

int DllReturn(TCHAR *cReturn)
{
	if (cReturn != NULL)
	{
		for (int n = 0; n < iATRLen; n++)
		{
			str.Format("%02x",reply.message.negativeReply.Data.bBody[n]);
			strBack += str;
		}
		int cchBuffer = strBack.GetLength() + 1;
		if (lstrcpyn(cReturn, (LPCTSTR)strBack, cchBuffer) != NULL)
		{
			return 0;
		}
	}
	return (-1);
}

5

指针参数是传值的

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明char* 接收另外一个函数返回的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)