我发现了许多有关从Delphi传递到C ++的话题,但仍然感到困惑。
std::string s1(" look here ");
将其传递给delphi代码的正确方法是什么?
所有这些都不起作用,产生错误的字符
char * s = (char *)s1.c_str();
Call_Delphi_func(s);
.......
Memo1.Lines.Add(UTF8String(PChar(pointer(s))));
答案 0 :(得分:4)
您没有说出使用的是哪个版本的Delphi,而是您使用UTF8String
的事实表明您使用的是Delphi 2009或更高版本。如果是这样,则PChar
是PWideChar
(在C和C ++中为wchar_t*
)。显式使用PAnsiChar
(在C和C ++中为char*
),并消除不必要的Pointer
类型转换:
std::string s1 = u8" look here ";
char * s = const_cast<char*>(s1.c_str());
Delphi_func(s);
procedure Delphi_func(s: PAnsiChar); stdcall;
begin
Memo1.Lines.Add(UTF8String(s));
end;
或者,将std::wstring
与PWideChar
一起使用:
std::wstring s1 = L" look here ";
wchar_t * s = const_cast<wchar_t*>(s1.c_str());
Delphi_func(s);
procedure Delphi_func(s: PWideChar); stdcall;
begin
Memo1.Lines.Add(s);
end;