Unicode Probleme in C++ Builder XE3
-
Hallo alle zusammen,
eigentlich bin ich PHP Entwickler, aber nun wollte ich mir auch mal andere Sprachen anschauen (C++ und Delphi). Dazu nutze ich das RAD Studio XE3.
Ich habe aber als Quereinsteiger (wie zu erwarten) bei C++ natürlich so meine diversen Problemchen.
Das Größte und nervigste Problem ist die Handhabung der Variablentypen.
Aktuell brauche ich die QuickPDF Library um PDF Dokumente zu bearbeiten.
Soweit kein Problem.
Hier mal mein Code:... pdf.LoadFromFile(L"D:\\Test.pdf", L""); int id = pdf.SelectedDocument(); int TotalPages = pdf.PageCount(); UnicodeString pageExtract; for (int n = 1; n < TotalPages; n++) { pageExtract = IntToStr(n); pdf.ExtractFilePages(L"D:\\Test.pdf", L"", L"D:\\Test_split_" + pageExtract + L".pdf", pageExtract); } ...
Dazu noch kurz die Methode aus der QuickPDF Library erklärt:
int DPLExtractFilePages(int InstanceID, wchar_t * InputFileName, wchar_t * Password, wchar_t * OutputFileName, wchar_t * RangeList);
Und hier die Compiler Fehlerausgabe:
[bcc32 Fehler] Unit1.cpp(45): E2064 'const std::wstring &' kann nicht mit 'UnicodeString' initialisiert werden
Vollständiger Parser-Kontext
Unit1.cpp(21): Analyse: void _fastcall TForm1::Button1Click(TObject
[bcc32 Fehler] Unit1.cpp(45): E2342 Keine Übereinstimmung des Parametertyps 'RangeList' ('const std::wstring &' erwartet, 'UnicodeString' erhalten)
Vollständiger Parser-Kontext
Unit1.cpp(21): Analyse: void _fastcall TForm1::Button1Click(TObjectWenn ich keine Variable einsetze funktioniert es einwandfrei. Die Seite wird aus dem PDF entnommen und abgespeichert.
pdf.ExtractFilePages(L"D:\\Test.pdf", L"", L"D:\\Test_split_.pdf", L"1");
Es wäre super, wenn ihr mir das mal erklären könntet und wie ich die Variable "pageExtract" vom Typ deklarieren muss, damit es auch mit der Variable funktioniert.
Vielen Dank für Eure Hilfe und viele Grüße,
Holger
-
Der UnicodeString hat irgendeine Methode, die einen Pointer auf den Inhalt des UnicodeStrings zurückgibt (
w_str()
oder so ähnlich). Benutz´ diese Methode, um den String an dieExtractFilePages
Funktion zu übergeben.Edit:
ExtractFilePages
erwartet diversewchar_t*
, du übergibst aberUnicodeString
Objekte. Damit kannExtractFilePages
nichts anfangen und beschwert sich daher.w_str()
liefert den rohen Zeiger auf die Stringdaten zurück, damit dürfteExtractFilePages
dann auch zufrieden sein.Edit 2:
c_str
gibt´s nicht, heißt wohlw_str()
-
pageExtract.w_str()
-
Warum nicht
wstring pageExtract;
statt
UnicodeString pageExtract;
?
-
1.) Die XE3 Hilfe zu UnicodeString ergibt sofort:
Methode: c_str()
Gibt einen Zeiger auf den zugrunde liegenden String data als const wchar_t* zurück.2.)Es muss also lauten:
pdf.ExtractFilePages(L"D:\\Test.pdf", L"", L"D:\\Test_split_" + pageExtract.c_str() + L".pdf", pageExtract.c_str());