![]() |
3 Fragen zu DLLs als Resource Datei für Text und Bilder
Hallo,
gemäß einiger Beiträge im Forum habe ich es geschafft mir eine dll datei mit jpeg Bildern zu erzeugen, wobei das Laden der Bilder nach einigen Anfangsschwierigkeiten auch funktioniert. Zusätzlich zu den Bildern benötige ich die Anzahl der Bilder und zu jedem Bild 'nen bischen Text. Aufbau: RC-datei mit Bildern -> RES-datei und die RES-datei in die dll geladen. Hintergrund: Ohne die Software (das Prog.) anfassen zu müssen sollte die dll Datei erweiterbar sein, d.h. die Anzahl der Bilder und Beschreibungen sollte variiren können. Frage: Wie kann ich die Anzahl der Bilder in der dll herausbekommen, kann man vieleicht auch eine Integer Value (Constante) aus der dll auslesen ? Und wie bekomme ich den Text in die dll, bzw. wie kann ich ihn auslesen ? Was für Möglichkeiten habe ich generell bei den Resource Dateien bezüglich der Resourcen die man hier einbinden kann ? Danke, Karsten |
Re: 3 Fragen zu DLLs als Resource Datei für Text und Bilder
Zum auslesen der Anzahl kannst du dir ja eine Funktion erstellen, die vom Programm aufgerufen wird und innerhalb der DLL einfach die Anzahl aus den Resourcen oder aus einer in der DLL deklarieren Konstante ausliest.
|
Re: 3 Fragen zu DLLs als Resource Datei für Text und Bilder
Text bekommst du mit StringTablen in die Ressource. Kuck dir dazu das Rssosurcen-Tutorial von tommy-lie anz. Zu finden in meinen Win32API-Tutorials für Delphi auf meiner Seite.
|
Re: 3 Fragen zu DLLs als Resource Datei für Text und Bilder
Hallo Karsten!
Willkommen im JPEG-Club. *ggg* Wieso änderst Du nicht einfach die Ressourcen und compilierst die DLL neu? Dann exportiert Deine DLL ne kleine Funktion, die die Anzahl der Bilder ans Prog durchreicht. Die Anzahl deklarierst Du einfach als Konstante in der DLL. Die Funktionen, die Bilder bzw. Strings aus den Ressourcen saugen, würd ich dann auch gleich in die DLL packen und dafür entsprechende Fkt exportieren. Viel Erfolg! OLLI |
Re: 3 Fragen zu DLLs als Resource Datei für Text und Bilder
Danke,
wenn man bedenkt das es prinzipiell doch nicht so kompliziert ist, war ich gestern doch wohl zu lange auf... :drunken: O.k.: Die Anzahl der Bilder wird durch eine Konstante in der dll angegeben und kann direkt über eine Funktion die von der dll mitgeliefert wird ausgelesen werden. Ich denke das man das auch mit dem Text (ShortString oder PChar sollt ohne extra dll auskommen) machen kann. Die Funktion zum auslesen der Bilder würde dann auch in die dll verlagert, wobei... :idea: Die Anzahl der Bilder in der dll zu kennen hat nur den einzigen nutzen das man nicht auf ein Bild zugreifen will was es gar nicht gibt, d.h. wenn ich die Funktion (zum auslesen der Bilder) in die dll packe brauche ich keine Funktion zum auslesen der Anzahl, weil ich dann ja direkt auf die Konstante zugreifen kann. Wenn wir schon dabei sind alles in die dll zu packen, kann man auch die komplette Form die die jeweiligen Bilder mit Text anzeigen soll in die dll packen ? Wenn ja, wie ? Gruß und Danke, Karsten |
Re: 3 Fragen zu DLLs als Resource Datei für Text und Bilder
Lass die VCL aus der DLL raus und verwende dort nur reinrassiges WINAPI. Sonst kannst Du Dir den Aufwand mit der DLL gleich schenken!
Meine Meinung OLLI |
Re: 3 Fragen zu DLLs als Resource Datei für Text und Bilder
Hallo Olli,
bitte definiere "reinrassiges WINAPI". Gruß, Karsten |
Re: 3 Fragen zu DLLs als Resource Datei für Text und Bilder
Hallo Leute,
das Auslesen der Konstanten aus der dll ist recht einfach:
Delphi-Quellcode:
nur das Auslesen der Bilder...
function GetHighIndex: Integer; stdcall;
begin Result := HighIndex; // Konstante (3) end; Vorher, wo sich die Funktion noch im Hauptprogramm befand war es recht einfach (nach Beitragsvorlagen):
Delphi-Quellcode:
nur jetzt kann ich ja wohl schlecht in der dll-Datei die dll-Datei laden, und
...
Lib := LoadLibrary(PChar(ExtractFilePath(ParamStr(0)) + 'MyDll.dll')); if Lib <> 0 then begin LoadPic := 'Bild' + IntToStr(Index); ResStream := TResourceStream.Create(Lib, LoadPic, 'JPEG'); TempJpeg := TJpegImage.Create; TempJpeg.LoadFromStream(ResStream); Result.Picture.Bitmap.Assign(TempJpeg); ...
Delphi-Quellcode:
geht nicht weil ich ja Jpegs laden will, und ein TJpegImage als Zwischenvariante erscheint mir auch nicht so ganz zu funktionieren.
Result.Picture.Bitmap.LoadFromResourceName(HInstance, LoadPic);
Delphi-Quellcode:
Hat da jemand eine Idee ?
TempJpeg.LoadFromStream(...
.LoadFromClipboardFormat(... .LoadFromFile(... Gruß, Karsten |
Re: 3 Fragen zu DLLs als Resource Datei für Text und Bilder
Gib als Handle hInstance bei TRessoueceStream.Create an.
|
Re: 3 Fragen zu DLLs als Resource Datei für Text und Bilder
Wieso willst du die Ladefunktion in der DLL einbauen?
Machs doch so z.B.
Delphi-Quellcode:
Die einzige Funktion, die in der DLL sein muss ist die GetHighIndex, wie sie oben schon erklärt wurde.
...
var GetHighIndex : function : Integer; stdcall; ... Lib := LoadLibrary(PChar(ExtractFilePath(ParamStr(0)) + 'MyDll.dll')); @GetHighIndex := nil; if (Lib <> 0) then begin GetHighIndex := GetProcAddress(Lib, 'GetHighIndex'); If Assigned(GetHighIndex) then HighIndex := GetHighIndex; end; if (Lib <> 0) then for Index := 1 to HighIndex do begin LoadPic := 'Bild' + IntToStr(Index); ResStream := TResourceStream.Create(Lib, LoadPic, 'JPEG'); TempJpeg := TJpegImage.Create; TempJpeg.LoadFromStream(ResStream); Result.Picture.Bitmap.Assign(TempJpeg); ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz