Wie funktioniert das mit den Resource-Files?
-
In Visual Studio gibt es bei jedem C++ Projekt doch immer einen Ordner "Resource Files". Ich hab damit ein wenig rumgespielt und bisher zumindest rausfinden können, dass man da wohl Menüs / Cursors und Bitmaps einbinden kann.
Ich hab nun eine kleine Anwendung mit SDL und würde es gerne mal ausprobieren, ein Bitmap in meiner Anwendung zu speichern und dann anzuzeigen. Leider habe ich keine Literatur gefunden, nichtmal in der MSDN, weil ich nicht genau weiß, wie man das nennt!
-
-
Ja, danke! Ich hab jetzt schon einige Zeit lang rumprobiert, aber jetzt komme ich einfach nicht mehr weiter. Vermutlich mache ich einfach aus Unwissenheit etwas falsch. Also, ich habe jetzt über Visual-Studio ein Bitmap als Resource hinzugefügt. Danach hab ich ihm im Resourceneditor die ID "IDB_IMAGE" gegeben.
So, ich hab jetzt also einmal meine EXE test1.exe in der sich die Bitmap-Resource IDB_IMAGE befindet. In meinem Code schreibe ich jetzt also wiederrum folgendes:
HMODULE test1 = LoadLibrary(L".\\..\\debug\test1.exe");
Das klappt auch, der Debugger zeigt mir das hier (Name, Value, Type):
test1, 0x00400000 {unused=9460301 }, HINSTANCE__ *
Gut, danach will ich nach meinem Bitmap suchen:
HRSRC IDB_IMAGE = FindResource(test1, L"IDB_IMAGE", RT_BITMAP);
Hier scheint es aber zu scheitern... der Debugger zeigt mir (Name, Value, Type):
IDB_IMAGE, 0x00000000 {unused=??? }, HRSRC__ *
Wenn ich jetzt GetLastError() aufrufe bekomme ich die Fehlernummer 1814, die in der MSDN so beschrieben wird:
http://msdn2.microsoft.com/en-us/library/ms681386(VS.85).aspx schrieb:
ERROR_RESOURCE_NAME_NOT_FOUND
1814The specified resource name cannot be found in the image file.
Ich kann damit nicht so wirklich was anfangen...
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum MFC (Visual C++) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Irgendwie macht mir das angst:
HMODULE test1 = LoadLibrary(L".\..\\debug\test1.exe");
Abgesehen davon, dass da ein Backslash fehlt vor test1.exe
-
LoadLibrary ist eigentlich nur zum Laden von DLLs gedacht, wieso willst du damit deine EXE laden?
Bitmap-Ressourcen kannst du einfach mit CBitmap::LoadBitmap laden.
-
Oh, das Backslash ist im Code aber gesetzt! Nunja, die MSDN sagt zu LoadLibrary:
The name of the executable module (either a .dll or .exe file)
Und in einem Beispielcode wird damit auch eine exe geladen...
Ich werde es mal mit LoadBitmap probieren... bisher habe ich das aber bewusst umgangen, weil ich (nach wie vor) gerne wissen würde, was denn am Code falsch ist / warum es nicht funktioniert.
-
Quatsch, nicht LoadBitmap, das wäre ja MFC, sondern LoadImage habe ich umgangen. Gebe mir zwar wenig Erfolgschancen, aber probieren werde ich es trotzdem mal.
-
Quatsch, nicht LoadBitmap, das wäre ja MFC
Ahja... und in welchem Forum bist Du?
-
...
Ich will jetzt eigentlich WinAPI machen, aber das Thema wurde nunmal hier rein geschoben...
-
HMODULE this = GetModuleHandle(NULL); HANDLE image = LoadImage(this, L"IDB_IMAGE", IMAGE_BITMAP, 200, 100, LR_DEFAULTCOLOR);
Fehler: 1814, wie oben.
Gut, woran es liegt ist schon recht klar, aber wie macht man es richtig?
-
this ist natürlich ein Schlüsselwort, also nehmt es so:
HMODULE test1 = GetModuleHandle(NULL); HANDLE image = LoadImage(test1, L"IDB_IMAGE", IMAGE_BITMAP, 200, 100, LR_DEFAULTCOLOR);
-
HMODULE module = GetModuleHandle(NULL); HANDLE image = LoadImage(module, L"IDB_IMAGE", IMAGE_BITMAP, 200, 100, LR_DEFAULTCOLOR);
this ist reserviert...
-
Über viele Umwege habe ich es jetzt mit MAKEINTRESOURCE() geschafft. Aber unerwarteterweise ist das BMP im Speicher 14 Byte kleiner als das Original.
Ich habs so geladen:
HRSRC img = FindResource(test1, MAKEINTRESOURCE(IDB_IMAGE), RT_BITMAP);
Welche 14 Byte werden mir da abgeschnitten? Und vorallem, wie kann ich die komplette Datei, also raw einlesen?