Warum gibt es untersch. API-Funktionen?



  • Manche API-Funktionen sind doppelt - z.B.:

    AddAtomA@4
    AddAtomW@4

    ich denke A steht für Alias - was bedeutet W und wieso gibt es so soft 2 Funktionen?



  • Das ist nur der Unterschied zwischen ANSI und Unicode. 🙂
    Siehe Petzold, 2. Kapitel! 😃



  • A steht für ANSI und W für WideChar. Das sind zwei Varianten derselben Funktion. Die A-Variante arbeitet mit ASCII-Strings und die W-Variante mit wide chars, also Unicode. Unter windows 2000/XP rufen die A-Versionen meistens nach einer Umwandlung die W-Versionen auf. unter Win9x gibts die meisten API-Calls nur in der A-Version.

    Programme benutzen die W-Version sobald du beim Kompilieren das Symbol UNICODE (oder wars _UNICODE oder beide?) definierst, ansonsten die A-Version.

    Hoffe das Hilft 🙂



  • A steht für Ascii, und W für Widechar.
    Widecharacters sind mit 2 Byte, Ascii mit 1 Byte codiert. Bei neueren Windows Versionen (ab win 2000?) wird intern mit dem Unicode Zeichensatz gearbeitet.
    D.h. Bei Aufruf der *A Funktion wird der String in Unicode umgewandelt, und dann die *W Funktion aufgerufen.

    In der Header Datei ist AddAtom dann etwa definiert

    #ifdef UNICODE
    define AddAtom AddAtomW 
    #else
    define AddAtom AddAtomA
    #endif
    


  • Das A sollte eigentlich für ANSI (American National Standards Institute) stehen (siehe Petzold, dt. 5. Auflage, S.38).

    Hier ein Ausschnitt aus MSDN:

    Als Beispiel werden im folgenden die beiden Beschreibungen für die Funktion SetWindowText in der Sprache C aufgeführt. Sie werden bemerken, daß die erste Beschreibung die Funktion als SetWindowTextA definiert, wobei das nachgestellte „A“ sie als ANSI-Funktion kennzeichnet:

    BOOL
    WINAPI
    SetWindowTextA(
    HWND hWnd,
    LPCSTR lpString);

    Die zweite Beschreibung definiert die Funktion als SetWindowTextW, wobei das nachgestellte „W“ für „Wide“ (Breit) diese als Unicode-Funktion kennzeichnet:

    BOOL
    WINAPI
    SetWindowTextW(
    HWND hWnd,
    LPCWSTR lpString);

    [ Dieser Beitrag wurde am 04.06.2003 um 22:19 Uhr von Erhard Henkes editiert. ]


Anmelden zum Antworten