Problem bei LoadImageW, das bei LoadImageA nicht auftritt



  • Ich bin auf folgendes Problem gestoßen: Die Funktion LoadImageA funktioniert zwar, aber die Funktion LoadImageW funktioniert nicht. Das gleiche mit der generellen Funktion LoadImage: Ist Unicode nicht definiert (so daß sie LoadImageA entspricht), funktioniert sie, ist Unicode definiert, funktioniert sie nicht. Woran könnte das liegen?

    Hier noch ein Beispiel:

    //#define UNICODE
    //Wenn die obere Zeile auskommentiert wird, funktioniert es nicht.
    
    #include <windows.h>
    
    int WINAPI WinMain (HINSTANCE instance, HINSTANCE, LPSTR, int)
    {
    	if (LoadImage (instance, TEXT ("C:\\WINDOWS\\Desktop\\Bild.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE))
    		MessageBox (NULL, TEXT ("Ja"), TEXT (""), MB_OK);
    	else
    		MessageBox (NULL, TEXT ("Nein"), TEXT (""), MB_OK);
    
    	return 0;
    }
    


  • du warst doch der der noch windows 98 nutzt, oder?



  • Ja, das war ich. Hat das was damit zu tun? Immerhin passiert das nur bei dieser Funktion. Wenn ich zum Beispiel MessageBoxW aufrufe, funktioniert das wunderbar. (Außer natürlich, daß er die erweiterten Zeichen des Unicodes (zum Beispiel hebräische Buchstaben etc.) falsch darstellen würde, aber das ist ja nochmal eine andere Geschichte.)



  • Vielleicht hilft dir das hier: Microsoft Layer for Unicode on Windows Me/98/95 Systems

    Zu MessageBoxW im Gegensatz zu LoadImageW:

    Windows 95/98/Me: Even though MessageBoxW exists, it is supported by the Microsoft Layer for Unicode on Windows 95/98/Me Systems to give more consistent behavior across all Windows operating systems.

    Windows 95/98/Me: LoadImageW is supported by the Microsoft Layer for Unicode (MSLU). To use this, you must add certain files to your application, as outlined in Microsoft Layer for Unicode on Windows 95/98/Me Systems.



  • Die wenigsten "W" Funktionen funktionieren unter Windows 98. Die meisten sind einfache "return error" Stubs, oder gleich garnicht vorhanden.



  • Hier: www.c-plusplus.net/forum/viewtopic-var-t-is-168164.html wurde mir gesagt, daß die A-Version einer Funktion ihren String einfach in einen Unicode-String umwandelt und dann die W-Version aufruft. Genauso hatte ich das auch geplant. Aber das dürfte dann doch hier eigentlich gar nicht funktionieren, oder?



  • Nein. Die W-Funktion gibt einfach sofort einen Fehlerwert zurück. So nach dem Motto:

    bool NichUnterstuetzteFunktion[b]W[/b](...)
    {
       [b]return (false);[/b]
    }
    


  • Aber was ist mit Funktionen, wo beide Versionen unter Windows 98 durchaus funktionieren (z.B. MessageBox)? Die Funktionen machen ja beide das gleiche, nur daß jede einen anderen String hat. Es ist also nicht anzunehmen, daß in beiden Funktionen genau das gleiche reingeschrieben wurde. Mir wurde gesagt, daß die A-Funktion einfach nur den String in einen Unicode-String umwandelt und dann die W-Funktion aufruft. Aber das scheint ja nicht überall der Fall zu sein.



  • NES-Spieler schrieb:

    Hier: www.c-plusplus.net/forum/viewtopic-var-t-is-168164.html wurde mir gesagt, daß die A-Version einer Funktion ihren String einfach in einen Unicode-String umwandelt und dann die W-Version aufruft.

    Ich hab es vermutlich vegessen zu sagen (weil es für mich logisch ist):
    Das geht natürlich nur, wenn in der Doku auch erwähnt wird, dass es eine A und W Version gibt! Und dass die W-Version auch unter dem OS gibt (die meisten W-Versionen gibt es erst ab NT3.51 und unter Win9x/Me gar nicht).



  • (die meisten W-Versionen gibt es erst ab NT3.51 und unter Win9x/Me gar nicht)

    Naja, geben tut es sie schon, sie funktionieren nur nicht oder nicht richtig.

    Gibt es eigentlich irgendwo eine Auflistung, welche W-Funktionen unter Windows 98 soweit funktionieren (natürlich bis auf die korrekte Darstellung der erweiterten Zeichen) (wie MessageBoxW) und welche dort, solange man nicht irgendwelche Layer benutzt, nur Pseudo-Funktionen sind, die lediglich einen Fehlerwert zurückgeben (wie LoadImageW)?



  • NES-Spieler schrieb:

    (die meisten W-Versionen gibt es erst ab NT3.51 und unter Win9x/Me gar nicht)

    Naja, geben tut es sie schon, sie funktionieren nur nicht oder nicht richtig.

    Jo aber just to provide compatibility 😉 .

    NES-Spieler schrieb:

    Gibt es eigentlich irgendwo eine Auflistung, welche W-Funktionen unter Windows 98 soweit funktionieren [...] ?

    Nein nicht direkt. Du musst Dir zu jeder Funktion die Beschreibung der MSDN angucken. Da steht es ja 😉 .


Anmelden zum Antworten