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(TObject 😉

    Wenn 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 die ExtractFilePages Funktion zu übergeben.

    Edit:
    ExtractFilePages erwartet diverse wchar_t* , du übergibst aber UnicodeString Objekte. Damit kann ExtractFilePages nichts anfangen und beschwert sich daher. w_str() liefert den rohen Zeiger auf die Stringdaten zurück, damit dürfte ExtractFilePages dann auch zufrieden sein.

    Edit 2:
    c_str gibt´s nicht, heißt wohl w_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());


Anmelden zum Antworten