Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Bilder in DLL einbinden und aufrufen (https://www.delphipraxis.net/5107-bilder-dll-einbinden-und-aufrufen.html)

Adler 23. Mai 2003 23:39


Bilder in DLL einbinden und aufrufen
 
Hallo zusammen,

ich habe das Beispiel aus Library: Grafik / Sound / Multimedia - Bilder in DLL einbinden und aufrufen ausprobiert
Delphi-Quellcode:
var
  h :HINST;
  r :TResourceStream;
  j :TJpegImage;
  i :integer;
begin
  h := LoadLibrary('Bilder.dll');
  if h <> 0 then
  begin
    r := TResourceStream.Create(h, Bild1, 'Jpeg');
    j := TJpegImage.Create;
      try
        j.LoadFromStream(r);
        Image1.Picture.Bitmap.Assign(j);
      finally
        j.Free;
        r.Free;
      end;
  end;
  FreeLibrary(h);
end;
und unter WinXP funktioniert auch alles reibungslos. Versuche ich aber jetzt das ganze unter Windows98 so funktioniert es nicht mehr, da mir die Funktion LoadLibrary kein Handle auf meine DLL liefert. Ein Handle von einer EXE hingegen wird geliefert. Woran könnte das liegen?

MfG
Adler

jbg 23. Mai 2003 23:45

Re: Bilder in DLL einbinden und aufrufen
 
Zitat:

Zitat von Adler
LoadLibrary('Bilder.dll');

Liegt die Bilder.dll im Systemverzeichnis oder im Windowsverzeichnis?

Wenn sie nämlich im selben Verzeichnis wie die EXE liegt, dann solltest du folgendes benutzen:
Delphi-Quellcode:
h := LoadLibrary(PChar(ExtractFilePath(ParamStr(0)) + 'Bilder.dll'));

Christian Seehase 23. Mai 2003 23:47

Moin Adler,

für den Fall, dass kein Handle zurückgeliefert wird, könntest Du mal

Delphi-Quellcode:
ShowMessage(SysErrorMessage(GetLastError));
aufrufen, um Dir den Grund für den Fehler anzusehen.

Adler 23. Mai 2003 23:49

Hallo jbg,

die DLL liegt zwar im gleichen Verzeichnis wie die EXE ich habe aber den kompletten Pfad der DLL übergeben und als Ergebnis hat h immer den Wert Null.

Adler 24. Mai 2003 08:58

Hallo Christian,

Delphi-Quellcode:
ShowMessage(SysErrorMessage(GetLastError));
liefert mir das angeblich zu wenig Speicher vorhanden ist. Ich muss dazu sagen das ich Win98 auf einem anderen Rechner laufen habe als WinXP. Vor dem Programmstart sind aber noch gut 32 MB Arbeitsspeicher frei so das es eigentlich kein Problem sein sollte eine DLL von 2,5 MB aufzurufen.

MfG
Adler

Adler 24. Mai 2003 15:18

Hallo zusammen,

es lag scheinbar wirklich nur an der Größe der DLL. Ich habe sie jetzt auf mehrere DLLs verteilt und jetzt funktioniert es. Wäre mir zwar lieber gewesen alles in eine DLL zu bekommen aber was soll man machen :evil:

Vielen Dank an jbg und Christian

Luckie 24. Mai 2003 15:24

Wie groß war denn die eine DLL?

Adler 24. Mai 2003 15:38

2,5 MB


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 Uhr.

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