Как передать строку Unicode из C ++ в Delphi? - PullRequest
0 голосов
/ 30 октября 2018

Я нашел много тем о переходе с 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))));

1 Ответ

0 голосов
/ 30 октября 2018

Вы не сказали, какую версию 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...