Resourcen auslagern...
-
Hallo,
ich schreibe gerade an einem Programm, welches zum größtenteil auf Grafiken basiert (insgesamt ca. 200 Stück). Jetzt wollte ich diese Grafiken irgendwie in dem Programm anzeigen lassen (was ja auch rein theoretisch gar kein Problem währe [Picture->LoadFromFile bzw. Picture->LoadFromResourceName]).Da habe ich jetzt allerdings ein Problem!
- Ich möchte die Dateien nicht einfach im Bitmap-Format laden (über LoadFromFile), da sie dann ja von jedem verwendet werden können (da sie ja als *.bmp o.Ä. vorliegen).
- Ich möchte sie auch nicht alle per *.res in die *.exe einbinden, da diese dann viel zu groß wird.
Jetzt meine Frage:
Gibt es eine Möglichkeit, zur Laufzeit Resourcen aus einer *.res-Datei nachzuladen (die nicht ins Programm reinkompiliert wurde), so nach dem Motto
LoadFromResourceFile();?Ich habe schon die Suche benutzt und in die FAQ geguckt, aber nichts brauchbares gefunden!
-
hi,
du kannst Resourcen in eine DLL einbinden und diese dann dynamisch laden...MfG
Alexander Sulfrian
-
Ist mir schon klar, aber ich habe keine Ahnung, wie das funktioniert.
Muss ich die Resourcen dann wie bei der .exe in die DLL reinkompilieren oder muss ich dass da anders machen?
Und wie genau kann ich die Resourcen dann aus der DLL laden?
Ich habe mich bisher leider noch überhaupt nicht mit DLLs beschäftigt...
-
Hi!
Lacht nicht, aber ich weiß nicht wie man mit dem Borland Resourcen erstellt!
Wie man mit ihnen umgeht weiß ich folglich auch nicht!
Könntet ihr mir bitte erklären wie das geht?MfG Red!
-
Ich hab jetzt eine DLL in die die Resourcen reinkompiliert sind, aber wie kann ich jetzt von der exe aus darauf zugreifen?
Mit LoadLibrary(); hat es nicht geklappt!
Weiß jemand, wie das geht?
-
Hi,
ich hab dir hier mal einen Beitrag aus der MSDN. Ist zwar nicht direkt für den BCB, kannst dir aber Anregungen holen, da das ganze ja WinAPI ist und das läuft aich im BCB...(Das ganze mit dem UpdareResource ist logischerweise nur nötig, wenn du evtl. Änderungen in die DLL schreiben willst)
MfG
Alexander Sulfrian
-
Also, nach einigen Tagen bin ich jetzt mal dazu gekommen, das so auzuprobieren.
Vielleicht bin ich ja einfach nur zu doof (ich fürchte fast, dass wird's sein
), aber ich kriege das einfach nicht hin!Ich habe jetzt die Resource:
dd_maingraphic JPEG "__resources\maingraphic.jpg"per *.res in die dll reinkompiliert.
Im Programm möchte ich jetzt (bei Tmainform->OnCreate) diese Grafik in die Komponente "TJPEGImage maingraphic" laden... aber irgendwelche Fehlermeldungen spuckt der mir immer aus... und wenn nicht, dann klappt es trotzdem nicht...
Das ganze soll ein Launcher für ein Programm seib, die Grafik stellt die Versionsnummer dar (welche, ebenfalls per *.res, in die exe reinkompiliert wird). Sollte das Programm jetzt bereits auf dem auszuführenden Computer installiert sein (wird per Registry geprüft) dann soll die Grafik aber nicht die Version der Exe anzeigen sondern sich die Versionsgrafik aus der Dll holen (da diese ja eventuell neurer sein könnte).
Dazu lade ich die Resource mit:
HINSTANCE kernel = LoadLibrary("dd_krnl.dll"); //... FreeLibrary(kernel);Aber bei dem "//..." kakt's irgendwie!

Weiß vielleicht irgendjemand wie das exakt funktioniert? Ich kenne mich mit Dlls wirklich nicht aus, ich habe bisher noch nie damit gearbeitet, daher weiß ich auch nicht, wo ich suchen sollte (Internet, Suchfnktion etc.).
-
Hi,
was steht denn bei dem //... ?*sicheineKristallkugelwerkstadtbauentut*
MfG
Alexander Sulfrian
-
Also, ich hab da wie gesagt nicht alles ganz verstanden (wird wohl ziemlich falsch sein, aber was soll's
)void __fastcall TForm1::FormCreate(TObject *Sender) { HINSTANCE library = LoadLibrary("testdll.dll"); HINSTANCE opened_library = FindResource(library, "dd_maingraphic", "JPEG"); HINSTANCE graphic = LoadResource(opened_library, "dd_maingraphic"); FreeLibrary(library); }Ist jetzt nicht exakt das gleiche wie oben beschrieben, ich bin gerade nicht an mein eigentliches Projekt herangekommen.
Ich weiß jetzt nicht, ob das soweit schon einmal richtig ist, aber selbst wenn, weiss ich nicht, wie ich die Grafik jetzt mit dem TImage "assignen" soll...
Ich hab's mal mit
Image1->Picture->Assign(graphic);versucht, hat aber nicht geklappt ("Cannot convert Void * to TPersistent *")...
-
Ji,
erstmal gibt's eine Funktion die sich LoadFromResource nennt und zweitens werde ich mir mal deinen Code anschauen und gucken ob ich einen Fehler finde....MfG
Alexander Sulfrian
-
Stimmt, auch wenn ich selbst bisher nur die Funktion LoadFromResourceName(); verwendet habe (und LoadFromResource(); ehrlich gesagt überhaupt nicht kenne...). Das Problem ist nur, das eine TJPEGImage-Komponente diese Funktionen irgendwie nicht zu haben scheint (im Gegensatz zu einer TBitmap). Jedenfalls kommt bei mir die Meldung "... is not a member of TJPEG", egal, welche Funktion ich aufrufe.
Wie genau muss ich die Funktion denn verwenden (sollte sie überhaupt beim TJPEGImage angewand werden?)?
P.s. die BCB-Hilfe kennt bei mir auch kein LoadFromResource();, nur LoadFromResourceID(); und LoadFromResourceName();