gpt4 book ai didi

c++ - Delphi 和 C++ 结构

转载 作者:行者123 更新时间:2023-11-28 04:31:29 24 4
gpt4 key购买 nike

我有以下 C++ 函数,它导出一个结构,其中包含一个 char* 字段,但在 Delphi 中使用时,字符串值并不像预期的那样,尽管它是空终止的。

typedef struct _MyStruct{
char* name;
// other fields
}MyStruct,*PMyStruct;

extern "C" __declspec(dllexport) __cdecl MyTestStr(PMyStruct _PMyStruct)
{
std::string str = "string";
std::vector<char> cstr(str.begin(), str.end);
cstr.push_back('\0');//null-terminated
_PMyStruct->name = cstr.data();
}
type
PMyStruct = ^MyStruct;
MyStruct= record
name : PAnsiChar;
// other fields
end;

procedure MyTestStr(_PMyStruct: PMyStruct); cdecl; external 'mytest.dll' name 'MyTestStr';

procedure TestMyRec();
var
_MyStruct: MyStruct;
begin
MyTestStr(@_MyStruct);
showmessage(_MyStruct.name);
// here the result is just 'YYYYYYYYYYYYYYYYYY' not 'string'
end;

最佳答案

_PMyStruct->name=cstr.data(); 只是指向字符串主体。但是在函数调用之后 local object std::string 应该被处理掉。所以你有指向一些内容不可预测的内存地址的指针,如果内存不属于应用程序,这可能会导致 AV。

似乎您必须分配内存并调用复制所需数据到该内存地址的函数。需要时释放此内存。

关于c++ - Delphi 和 C++ 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52776637/

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