LoadImage liefert bei mir immer NULL zurück?
-
Hallo liebe Forum-Mitglieder,
ich habe zurzeit ein Problem mit der Funktion LoadImage.
Hierzu hier ein Wenig Code:
CFile file; CFileException err; if (!file.Open(bitmap, CFile::modeRead, &err)) { FileNotFoundException* fErr = new FileNotFoundException(L"Could not locate file!", bitmap); throw fErr; } HBITMAP test = (HBITMAP) LoadImage(AfxGetResourceHandle(), bitmap, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION); if (test == NULL) { DWORD error = GetLastError(); } m_pictureBox.SetBitmap(test);Also das File existiert, wird auch vom Benutzer ausgewählt, und wirklich auf Bitmaps beschränkt. (Mal das Schließen der OpenFileDialogBox, ohne Auswählen eines Files ausgenommen).
Warum liefert mir die Funktion LoadImage hier NULL? An anderer Stelle lade ich erfolgreich ein Icon File, mit analoger Herangehensweise.
Der Fehlercode der rauskommt lautet numerisch 2, was bedeutet das, und vor allem, wo kann ich denn eine Fehlertabelle hierzu finden?
Für Hilfe wäre ich sehr dankbar.
Gruß
Norman-Timo
-
Google: site:msdn.microsoft.com LoadImage
Da scheint etwas mit deinen Parametern nicht zu stimmen:
hinst:
To load a stand-alone resource (icon, cursor, or bitmap file)—for example, c:\myimage.bmp—set this parameter to NULL.Ansonsten könntest du den Fehlercode auch durch FormatMessage() jagen, um eine Textversion dazu zu bekommen.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hallo CStoll,
zunächst vielen Dank, aber es brachte mir nicht die Lösung, durch die Änderung des hInst auf 0 änderte sich leider überhaupt nichts.
Trotzdem hatte ich das in der MSDN Hilfe übersehen.
Jetzt würd ich doch zu gerne wissen, wie ich mit einem DWORD und FormatMessage an eine Textform des Errors kommen soll?
Vielen Dank,
Norman-Timo
-
so zum Beispiel:
#include <string> #include <windows.h> using namespace std; string get_errmsg( unsigned long error ) { void *buffer; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, 0, error, MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), reinterpret_cast< char* >( &buffer ), 0, 0 ); string errmsg = string( reinterpret_cast< char* >( buffer ) ); LocalFree( buffer ); return errmsg; } int WinMain( HINSTANCE instance, HINSTANCE prev_instance, char *cmd_line, int show_state ) { if( !SomeWinAPIFunctionWhichResultsInAnError( ) ) { string errmsg = get_errmsg( GetLastError( ) ); MessageBox( 0, errmsg.c_str(), "Error:", MB_OK ); } }Greetz, Swordfish
-
Vielen Dank an Dich Swordfish,
ich benutze zwar eine UNICODE Umgebung, aber den cast entsprechend anzupassen, das war kein Problem.
Mit Hilfe des Errortexts kam mir auch gleich die Lösung zugeflogen:
"Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird."-> Warum?
WEIL: ich vergessen hatte das CFile vor dem LoadImage zu schließen *HandAufDieStirnKlatsch*
Also gut, Ende gut, alles gut...
Norman-Timo
P.S.: Gibt es eine elegantere Möglichkeit, zu überprüfen, ob ein File vorhanden ist?
-
norman_timo schrieb:
P.S.: Gibt es eine elegantere Möglichkeit, zu überprüfen, ob ein File vorhanden ist?
GetFileAttributes