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

标签 c++ string delphi dll

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

相关文章:

C++:使用 & 运算符进行引用传递

regex - 字符串在数字单词模式上分割

ruby - 这个串联的运算顺序是什么?

c++ - 在新选项卡中打开 URL (Internet Explorer)

C++函数类型模板参数推导规则

web-services - 使用Delphi消费oData服务建议

delphi - 如何使用类助手调用受​​保护的方法?

Delphi VCL for Win32 - 多个事件处理程序

c++ - 如何在一个类(class)中正确管理2个不同类型的容器?

c - 使用 strchr 从数组中删除字符,在普通 C 中不返回正确的值