Вы не сказали, какую версию Delphi вы используете, но тот факт, что вы используете UTF8String
таким, какой вы есть, означает, что вы используете Delphi 2009 или более позднюю версию. Если это так, PChar
равно PWideChar
(wchar_t*
в C и C ++). Вместо этого используйте явно PAnsiChar
(char*
в C и C ++) и избавьтесь от ненужного Pointer
typecast:
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;