[C++Builder] UnicodeString <-> const char *



  • Hi Leute,
    ich hab mit C++ keine Erfahrung, aber folgendes Problem.
    Ich habe einen Konstruktor der folgende Überladungen hat:

    TiXmlDocument( const char * documentName );
    TiXmlDocument( const std::string& documentName );
    

    Und nun will ich den aufrufen:

    void __fastcall openXMLFile(String fileName)
    {
      TiXmlDocument doc(fileName);
      doc.LoadFile();
      ...
    

    Aber ich bekomme die Fehlermeldung:

    Keine Übereinstimmung für 'TiXmlDocument::TiXmlDocument(UnicodeString)' gefunden
    uXMLFormatter.cpp(26): Analyse: void _fastcall openXMLFile(UnicodeString)

    fileName ist ein UnicodeString und kommt von Edit1->Text.

    Wie bekomme ich das nun hin? 😕



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum VCL (C++ Builder) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hallo

    Technisch kannst du die Konvertierung durch einen explizieten Konstruktoraufruf vornehmen lassen :

    TiXmlDocument doc(AnsiString(fileName).c_str());
    

    Allerdings versagt diese Konvertierung für alle Dateinamen, die Unicode-zeichen enthalten, die nicht in der aktuell im Betriebsystem geladenen Codepage für AnsiString vorhanden sind.
    Deshalb ist die einzig ordentliche Lösung, eine Unicode-Variante von TiXmlDocument zu verwenden, bzw. auf eine Klasse für XML umzusteigen, die Unicode verarbeiten kann.

    bis bald
    akari


Anmelden zum Antworten