我有一个C++程序,它调用Delphi DLL来初始化包含字符的缓冲区。在C++和Delphi之间传递PChar/* char
我测试出来的接口,以确保数据正确传递:
在C++程序:
char * pMsg = (char*)malloc(3); //allocate buffer
Init(pMsg * char); //Delphi DLL function
在Delphi中DLL:
procedure Init(pMsg:PChar);
var
pHardcodedMsg:PChar;
begin
pHardcodedMsg:= '123';
CopyMemory(pMsg, pHardcodedMsg, Length(pHardcodedMsg));
end;
但,当我尝试在C++ printf((const char*)pMsg)
, 它显示m e“123
”后跟一些垃圾字符。
这是为什么? 如何成功地将一个char数组放入缓冲区并让字符串正确打印出来?
感谢。我这样做,它打印出正确的:pHardcodedMsg:='123'#0; CopyMemory(pMsg,pHardcodedMsg,Length(pHardcodedMsg)+1); – seveleven 2010-10-16 13:31:56
-1代表“Delphi不使用以NULL结尾的字符串”。 Delphi字符串以NULL结尾,并且不需要添加终止0 - 它已经在那里。您所需要的只是使用4个字符而不是3个。 – kludg 2010-10-16 13:48:19
Delphi字符串不是空终止的(null不会终止字符串)。但是你是对的,因为字符串和文字在字符串内容之后有一个空值。它可能不是第一个。 – 2010-10-16 16:41:29