FormatMessage Problem



  • Hallo,

    ich habe ein Problem mit FormatMessage. Und zwar möchte ich in der FormatMessage Funktion gleich den Text aus einer String Table Resource auslesen. Folgender Code funktioniert nicht:

    int i = ::FormatMessage(FORMAT_MESSAGE_FROM_HMODULE,
                        NULL,
                        nFormatID,
                        0,
                        tmp,
                        1024,
                        &ap);
        int b = GetLastError();
    

    i ist 0 und b ist 317 (Das System hat keine Meldung für die Meldungsnummer 0x%1 in der Meldungsdatei %2 gefunden.)

    Würde man erstmal davon ausgehen, dass nFormatID eine falsche (bzw. nicht existente) ID enthält. Folgender Aufruf funktioniert komischer Weise aber:

    TextLen = ::LoadString((HINSTANCE)GetModuleHandle(NULL), nID, Text, BufferSize);
    

    Mit nID == nFormatID.

    Meine Vermutung ist, dass beide die Texte aus verschiedenen Pools beziehen, kann dafür aber keinen Beleg finden.

    Hat jemand eine Idee, wo ich da was falsch gemacht habe?

    Danke!

    [ Dieser Beitrag wurde am 11.07.2003 um 12:03 Uhr von Loggy editiert. ]



  • Bei FormatMessage muss man doch auch das Modul angeben. Müsste es nicht FormatMessage(FORMAT_MESSAGE_FROM_HMODULE, GetModuleHandle(NULL), ... heissen?



  • Im Prinzip hast du recht, aber das MSDN meint dazu:

    Specifies that lpSource is a module handle containing the message-table resource(s) to search. If this lpSource handle is NULL, the current process's application image file will be searched.

    NULL ist also das gleiche, wie GetModuleHandle(NULL).

    Was ich eben noch gesehen habe, ist dass FormatMessage Message-Table-Resources benutzt. Vielleicht ist das nicht das gleiche, wie String-Table-Resources. Aber ich finde unter Visual Studio 6 keine Möglichkeit solche Message-Tables zu erstellen.

    Gibts die nicht? Oder wo finde ich die?



  • Vielleicht ist das nicht das gleiche, wie String-Table-Resources.

    Das ist ganz bestimmt nicht das Gleiche. Die benötigten Ressourcen werden Dir vom Message Compiler aus Message Text Files erzeugt.


Anmelden zum Antworten