Fragensteller
LoadImage schlägt mit GetLastError=87 fehlt

Allgemeine Diskussion
-
Hallo zusammen,
ich habe ein ATL-Projekt (bestehend aus einem ATL Control), das ein paar Bitmaps als Hintergrund lädt. Das geschieht per folgendem Code:
try{ this->arGeneralBitmaps[i] = (HBITMAP) LoadImageW( NULL, strPath, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); dLastError = GetLastError(); if (this->arGeneralBitmaps[i] == NULL){ WritePictureError(m_strGeneralBitmaps[i], L"custom error, bmp NULL" ,dLastError); } if (dLastError != ERROR_SUCCESS){ WritePictureError(m_strGeneralBitmaps[i], L"custom error, bmp not NULL" ,dLastError); } }catch (...){ //general exception thrown by unknown originator dLastError = GetLastError(); WritePictureError(strPath, L"generic error",dLastError); }
Alles eigentlich nichts Spektakukäres. Auf meinem Entwicklungsrechner funktioniert das auch prima, jedoch erhalte ich ab und an NULL von LoadImage zurück mit dem GetLastError = 87 (invalid parameters).
Das Bild ist in Ordnung, es ist immer da und die Bitmapheader sind gültig. Der Pfad zum Bild ist ebenfalls in Ordnung.
Habt ihr ein ähnliches Problem/Verhalten schon einmal gehört/gesehen ?? Googlet man "LoadImage GetLastError 87" kommt nichts weiter brauchbares raus.
Ich entwickle auf WinXP mit VS2010.
ich bin für jeden Tipp dankbar, danke im Voraus :)
- Verschoben Alex Pitulice Dienstag, 4. Februar 2014 11:40 Verschoben
- Typ geändert Ionut DumaModerator Freitag, 21. Februar 2014 09:37 Keine Rueckmeldung des Fragenstellender
Alle Antworten
-
Fehler 87 besagt "invalid parameter". Ich würde mal darauf tippen, dass irgendwas mit dem String nicht passt. Vielleicht ist der manchmal mit ungültigen Pfad, oder kein Unicode sondern irgendwie anders codiert...
Best regards
Bordon
Note: Posted code pieces may not have a good programming style and may not perfect. It is also possible that they do not work in all situations. Code pieces are only indended to explain something particualar. -
Der Pfad ist in Ordnung. Er ist aus einem Basisverzeichnis und einem Bitmapnamen zusammengesetzt (siehe weiter unten). Er funktioniert ja auch in einem Großteil der Fälle. Die Fehlerrate liegt bei etwas weniger als 5%.
CComBSTR strPath = L"C:\\Data\\Bitmaps\\"; strPath.Append(L"bmp01.bmp");
Gibt es vielleicht Probleme von LoadImage, wenn das File von einem anderen Prozess in Benutzung ist ??- Bearbeitet HendrikDeutschmann Dienstag, 4. Februar 2014 14:42
-
CComBSTR strPath = L"C:\\Data\\Bitmaps\\"; strPath.Append(L"bmp01.bmp");
LoadImageW erwartet eigentlich als zweiten Parameter einen LPCWSTR, und keinen CComBSTR. Ich habe mit dieser Klasse ewig nichts mehr gemacht, aber das die Klasse direkt einen LPCWCSTR zurückliefert lässt mit zweifeln. Es ist nur eine Idee.... weil wenn wieso auch immer eben kein LPCWSTR zurück kommt könnte der Fehler "invalid parameter" gut passen. Vielleicht macht es sinn einfahc mal testweise einen normalen UNICODE String auhc wchar_t's zu verwenden....
Gibt es vielleicht Probleme von LoadImage, wenn das File von einem anderen Prozess in Benutzung ist ??
Das könnte Grund des Problemes sein. Es kommt darauf an, wie auf das Bild zugegriffen wird. Wobei wenn der andere Prozess das Bild "lockt" dann würde ich aber eher einen anderen Fehler erwarten als "invalid parameter".
Best regards
Bordon
Note: Posted code pieces may not have a good programming style and may not perfect. It is also possible that they do not work in all situations. Code pieces are only indended to explain something particualar. -
**************************************************************************************************
Dieser Thread wurde mangels weiterer Beteiligung des Fragestellenden ohne bestätigte Lösung abgeschlossen.
Neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.
**************************************************************************************************Ionut Duma, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip„Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.