我发现了很多关于从 Delphi 到 C++ 的主题,但仍然感到困惑。
std::string s1(" look here ");
Run Code Online (Sandbox Code Playgroud)
将它传递给delphi代码的正确方法是什么?
这些都不起作用,产生错误的字符
char * s = (char *)s1.c_str();
Call_Delphi_func(s);
.......
Memo1.Lines.Add(UTF8String(PChar(pointer(s))));
Run Code Online (Sandbox Code Playgroud)
您没有说明您正在使用哪个版本的 Delphi,但事实上您使用的UTF8String方式意味着您正在使用 Delphi 2009 或更高版本。如果是,PChar则为PWideChar(wchar_t*在 C 和 C++ 中)。显式地使用PAnsiChar(char*在 C 和 C++ 中) 来代替,并摆脱不必要的Pointer类型转换:
std::string s1 = u8" look here ";
char * s = const_cast<char*>(s1.c_str());
Delphi_func(s);
Run Code Online (Sandbox Code Playgroud)
procedure Delphi_func(s: PAnsiChar); stdcall;
begin
Memo1.Lines.Add(UTF8String(s));
end;
Run Code Online (Sandbox Code Playgroud)
或者,使用std::wstringwithPWideChar代替:
std::wstring s1 = L" look here ";
wchar_t * s = const_cast<wchar_t*>(s1.c_str());
Delphi_func(s);
Run Code Online (Sandbox Code Playgroud)
procedure Delphi_func(s: PWideChar); stdcall;
begin
Memo1.Lines.Add(s);
end;
Run Code Online (Sandbox Code Playgroud)