gpt4 book ai didi

c++ - 在 C++ 和 Delphi DLL 之间传递 PChar/*char

转载 作者:行者123 更新时间:2023-11-30 01:30:54 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com