Unlogische Fehlermeldung



  • hi!
    Ich habe ein stück code aus einem buch (ab)geschrieben

    ...
    char buffer[300];
    ...
    
    MessageBox( NULL, buffer, L"Error", MB_OK | MB_ICONERROR );
    

    ich habe anfangs immer ca. eine Fehler meldung pro aufruf dieser funktion bekommen, das hab ich aber gerichtet in dem ich so ein "L" for einen string stelle. Aber jetzt wo ich eine Variable als parameter benutze kann ich ja sowas schlecht hinzufügen. In LPCWSTR kann ich es nicht ändern weil eine andere Funktion einen char als wert will.
    Und jetzt kommte das beste:
    Ich habe den code aus dem Buch mal (über CD) auf meinen Rechner kopiert und der lässt sich kompilieren ist aber KOMPLETT identisch. (Sogar ohne diese "L"s)
    Das hat mich jetzt so genervt das ich jetzt mal gleich nach hilfe fragen wollte!
    MFG;
    Drake



  • Ganz kurz:
    MessageBox (und viele andere Aufrufe aus der WinAPI) ist ein Makro, welches abhängig von einer anderen Makrodefinition in zwei verschiedene Funktionsaufrufe aufgelöst werden kann:
    MessageBoxA
    MessageBoxW

    Erstere Variante arbeitet mit char-Werten (ANSI-Zeichensatz), die zweite Variante arbeitet mit wchar-Werten (UNICODE).
    Vermutlich arbeitest Du mit Visual Studio und hast irgendwo im Dschungel der Menüstruktur einen Schalter auf UNICODE stehen.
    Finde den, stelle um auf Multibyte (ANSI), dann kannst Du die L's erstmal vergessen.

    Andere (aufwendig aber besser) Möglichkeit ist die, alle Textliterale mit TEXT("blabla") zu codieren - das Textmakro sorgt dafür, daß entsprechend der UNICODE-Definition entweder char oder wchar - Werte generiert werden. Damit kannst Du dann denselben Code mal als ANSI und mal als UNICODE - Version übersetzen, indem Du einfach den entsprechenden Schalter (siehe oben) umlegst.


Log in to reply