error C2440: 'Typumwandlung': '__wchar_t __gc[]' kann nicht in 'char *' konvertiert werden



  • Hallo...

    Mein Problem ist folgendes:

    Ich habe eine Windows Form mit einer TextBox. Nun will ich TextBox->Text in eine Funktion übergeben, welche lediglich char akzeptiert.

    error C2440: 'Typumwandlung': '__wchar_t __gc[]' kann nicht in 'char *' konvertiert werden

    Ich verwende das Microsoft Visual C++ 2003 .NET

    Ich habe auch schon gegoogelt, leider konnte ich keine Problembehebung, bzw. nur ungenaue Lösungswege finden:
    http://www.c-plusplus.net/forum/viewtopic-var-p-is-285374.html

    Diese Funktion half mir nicht weiter, da es nur weitere Fehlermeldung hervor rief.

    error C2065: 'use_facet': nichtdeklarierter Bezeichner

    Nunja und ne Header stand ja in der Antwort nicht.

    Danke schonmal im vorraus 🙂 (warum ist hier vor.raus wegge-x-t ?)
    Daniel

    [EDIT]Liegt es evtl. am .NET?



  • Guck mal hier

    MultiByteToWideChar(...)
    

    bzw.

    WideCharToMultiByte(...)
    

    Tester2



  • See: Convert from System::String* to TCHAR*/CString
    http://blog.kalmbachnet.de/?postid=18



  • Dankeschön, ich werde es gleich heute Abend wenn ich wieder zu Haus bin. Aber Danke für die (vor allem schnellen) Antworten ....

    Super Forum 🙂



  • Bei Verwendung von Methode 1:

    error C2664: 'WideCharToMultiByte': Konvertierung des Parameters 3 von 'System::String __gc *' in 'LPCWSTR' nicht möglich

    Die zweite Methode werde ich gleich ausprobieren. Ich hatte gelesen, dass das __gc irgendwie .NET ansprechen soll und das dann .NET diese Variable selber verwaltet, etc. 😕

    Falls jemand Ahnung von dem Problem hat, wäre ich dankbar wenn er es posten würde 🙂



  • Hast Du meinen Link gelesen?
    http://blog.kalmbachnet.de/?postid=18

    Also: Auch für gaaanz faule:

    System::String *mstr = S"Hello world";
    char *ustr;
    const char* umstring = (const char*)Marshal::StringToHGlobalAnsi(mstr).ToPointer();
    ustr = new TCHAR[strlen(umstring)+1];
    _tcscpy(ustr, umstring);
    Marshal::FreeHGlobal(IntPtr((void*)umstring));
    
    // do something with the unmanaged string
    
    delete [] ustr;
    

    oder

    System::String *mstr = S"Hello world";
      CString dest(mstr);
    


  • Ich hab da eine Gegenfrage:
    Hast du meinen Post richtig gelesen?

    Die zweite Methode werde ich gleich ausprobieren.

    Aaaaaber leider funktioniert deine Variante für "faule Leute".

    Beim ersten Beispiel zickt er u.a. Marshal an:

    error C2653: 'Marshal': Keine Klasse oder Namespace
    error C2228: Der linke Teil von '.ToPointer' muss eine Klasse/Struktur/Union sein
    Typ ist ''unknown-type''
    error C3861: 'StringToHGlobalAnsi': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden
    error C2653: 'Marshal': Keine Klasse oder Namespace
    error C3861: 'FreeHGlobal': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden

    Dein zweites Beispiel funktioniert schon wegen der kleinen Sache namens CString nicht:

    error C2065: 'CString': nichtdeklarierter Bezeichner
    error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'dest'
    error C3861: 'dest': Bezeichner wurde auch mit einer argumentbezogenen Suche nicht gefunden

    Es wird doch wohl irgendwie möglich sein, einen Text aus einem Textfeld in einen Char umzuwandeln 😮



  • Du könntest auch selber ein bisschen denken und ein

    using namespace System::Runtime::InteropServices;
    

    hinzufügen 🤡



  • Du könntest auch selber ein bisschen denken und ein

    Ich könnte dir natürlich auch...

    gaaaanz dick doll dafür danken, dass du dir die Arbeit gemacht hast und es gepostet hast. Somit haben auch unsere Nachfahren noch was davon 😉
    Nee, im ernst... Es klappt jetzt dank deiner Hilfe

    Dickes Dankeschön nochmal. 🙂


Anmelden zum Antworten