Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi 3 Fragen zu DLLs als Resource Datei für Text und Bilder (https://www.delphipraxis.net/12166-3-fragen-zu-dlls-als-resource-datei-fuer-text-und-bilder.html)

Karsten 22. Nov 2003 00:49


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

himitsu 22. Nov 2003 02:26

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.

Luckie 22. Nov 2003 03:20

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.

OLLI_T 22. Nov 2003 08:57

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

Karsten 22. Nov 2003 11:39

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

OLLI_T 22. Nov 2003 12:07

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

Karsten 22. Nov 2003 12:15

Re: 3 Fragen zu DLLs als Resource Datei für Text und Bilder
 
Hallo Olli,

bitte definiere "reinrassiges WINAPI".


Gruß,

Karsten

Karsten 23. Nov 2003 02:05

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:
function GetHighIndex: Integer; stdcall;
begin
  Result := HighIndex; // Konstante (3)
end;
nur das Auslesen der Bilder...

Vorher, wo sich die Funktion noch im Hauptprogramm befand war es recht einfach (nach Beitragsvorlagen):

Delphi-Quellcode:
...
  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);
...
nur jetzt kann ich ja wohl schlecht in der dll-Datei die dll-Datei laden, und

Delphi-Quellcode:
Result.Picture.Bitmap.LoadFromResourceName(HInstance, LoadPic);
geht nicht weil ich ja Jpegs laden will, und ein TJpegImage als Zwischenvariante erscheint mir auch nicht so ganz zu funktionieren.

Delphi-Quellcode:
TempJpeg.LoadFromStream(...
        .LoadFromClipboardFormat(...
        .LoadFromFile(...
Hat da jemand eine Idee ?

Gruß,
Karsten

Luckie 23. Nov 2003 03:25

Re: 3 Fragen zu DLLs als Resource Datei für Text und Bilder
 
Gib als Handle hInstance bei TRessoueceStream.Create an.

scp 23. Nov 2003 04:54

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:
...
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);
...
Die einzige Funktion, die in der DLL sein muss ist die GetHighIndex, wie sie oben schon erklärt wurde.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:20 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz