jeden Tag eine Fehlermeldung mit LPCTSTR



  • Hallo, ich hab hier ein (mir) unerklärliches Phänomen.

    ich verwende zwar den c++builder XE4 benutze aber den LPCTSTR Operator
    der MFC (deshalb dieses Forum).

    In meinem Projekt (c++builder XE4) habe ich eine Zeile:

    LPCTSTR lpszServiceName = "FirebirdServerDefaultInstance";

    die meldet jeden "2ten Tag" einen Fehler:

    E2034 Konvertierung von 'char const[30]' nach 'const wchar_t *' nicht möglich.
    dann setzt ich ein 'L' vor den String:

    LPCTSTR lpszServiceName = L"FirebirdServerDefaultInstance";

    und alles wird übersetzt. Aber am nächsten Morgen, selbes spiel
    das 'L' löschen und alles läuft wieder!
    Das ist kein vorgezogener Aprilscherz sondern exterm Nervig!
    Was verar...t micht denn da? 😕



  • hawiwo67 schrieb:

    Hallo, ich hab hier ein (mir) unerklärliches Phänomen.

    ich verwende zwar den c++builder XE4 benutze aber den LPCTSTR Operator
    der MFC (deshalb dieses Forum).

    In meinem Projekt (c++builder XE4) habe ich eine Zeile:

    LPCTSTR lpszServiceName = "FirebirdServerDefaultInstance";

    die meldet jeden "2ten Tag" einen Fehler:

    E2034 Konvertierung von 'char const[30]' nach 'const wchar_t *' nicht möglich.
    dann setzt ich ein 'L' vor den String:

    LPCTSTR lpszServiceName = L"FirebirdServerDefaultInstance";

    und alles wird übersetzt. Aber am nächsten Morgen, selbes spiel
    das 'L' löschen und alles läuft wieder!
    Das ist kein vorgezogener Aprilscherz sondern exterm Nervig!
    Was verar...t micht denn da? 😕

    LPCTSTR lpszServiceName = "FirebirdServerDefaultInstance";
    

    das ist ansii string, in XE4 kannst du einstellen ob du char oder wchar_t verwenden willst, sonst kannst du so machen.

    #ifdef _UNICODE
    #define TEXT(s) L##s
    #else
    #define TEXT(s) s
    #endif
    

    in MFC gibt es den _T makro, das automatisch den ansi oder unicode macht.
    wie das bei XE4 die unicode preprozessor abfragt, muss selber herausfinden.


  • Mod

    Was hat das mit der MFC zu tun? Die T-Notation kommt aus dem SDK!
    Da wird niemand veräppelt.

    Die Windows API hat eben zwei Schnittstellen für viele Funktionen. Eine Unicode Schnittstelle (W am Ende) und eine ANSI/ASCI/Multibyte Schnittstelle (A am Ende). Damit man sich eigentlich nicht drum kümmert wird je nach Compiler Einstellung die W oder A Funktion gewählt. Damit man aber auch die Typen frei definieren kann gibt es eben LPCTSTR was entweder eben zu LPCSTR und LPCWSTR wird.

    Stehe tausendfach erklärt in diesem Forum und anderen.

    Der Compiler macht was Du im sagst!


Anmelden zum Antworten