我有一个 C++ 程序,它调用 Delphi DLL 来初始化包含字符的缓冲区。
我正在测试接口(interface)以确保数据正确传递:
在 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 )
时,
它显示“123
”后跟一些垃圾字符。
为什么会这样? 我怎样才能成功地将一个 char 数组放入缓冲区并正确打印出字符串?
最佳答案
Delphi 不使用以 NULL 结尾的字符串,因此您需要在末尾打一个 0,因为 C/C++ 使用它来确定字符串数据的结束位置(Pascal 在开头使用字符串的大小 IIRC)。
通常的字符是 '\0' - 转义值 0。
不要忘记返回 4 个字符,而不是 3 个。
关于c++ - 在 C++ 和 Delphi DLL 之间传递 PChar/*char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3949046/