如何将unicode字符串从C++传递到delphi?

Sar*_*gis -1 c++ delphi

我发现了很多关于从 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)

Rem*_*eau 6

您没有说明您正在使用哪个版本的 Delphi,但事实上您使用的UTF8String方式意味着您正在使用 Delphi 2009 或更高版本。如果是,PChar则为PWideCharwchar_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)