Ich rufe von Delphi eine C extern Funktion in einer Visual Studio kompilierten DLL auf. Die DLL-Methode wiederum ruft eine C++ - Methode auf, die als Argument einen C++ - String-Typ verwendet. Die Zeichenfolge am Delphi-Ende ist UTF-8-codiert (ohne BOM). Ich muss sicherstellen, dass die C++ - Methode, die den String-Typ übernimmt, die UTF-8-codierte Zeichenfolge erhält.Wie UTF-8-Zeichenfolge von Delphi an eine DLL C Extern-Funktion übergeben?
Ich kann den DLL-Quellcode ändern. Meine Frage:
Meine UTF-8-Zeichenfolge auf der Delphi-Seite ist vom Typ Zeichenfolge. Welchen Typ sollte die C extern Methode annehmen? PChar, PWideChar? und wie konvertiere ich das in einen C++ - String-Typ?
Hinweis: Ich kann die UTF-8-Zeichenfolge nicht zuerst in eine AnsiString konvertieren, da die Codierung einige griechische Buchstaben speichert, die beibehalten werden müssen. Das C++ - Ende erstellt eine Kopie der Delphi-Zeichenkette und behandelt die Entsorgung von allokiertem Speicher.
Delphi Ende (Mit XE6):
mystr : string;
callCExternMethod (mystr) // cast to what?
C++ End (Verwenden von VS 2013):
void callCExternMethod (????? mystr) {
// convert mystr to C++ string type
callCPlusPlusMethod (takes C++ string type)
}
Sicher wurde diese Frage schon 100-mal gestellt ..... hast du versucht zu googeln? Jedes Mal, wenn Sie eine Windows-Funktion aufrufen, die Text verwendet, machen Sie genau das. – Johan
PansiChar auf der Delphi-Seite. const char * auf der C++ Seite. Sie müssen vor dem Aufruf der Funktion ortf8 als null terminiert codieren. Die RTL hat Funktionen dafür. Versuchen Sie zu suchen. –
Obligatorisch: http://rvelthuis.de/articles/articles-pchars.html – Johan