AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Ressource in einer DLL von außen aufrufen
Thema durchsuchen
Ansicht
Themen-Optionen

Ressource in einer DLL von außen aufrufen

Offene Frage von "blackdrake"
Ein Thema von blackdrake · begonnen am 22. Aug 2003 · letzter Beitrag vom 24. Nov 2003
Antwort Antwort
blackdrake

Registriert seit: 21. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#1

Ressource in einer DLL von außen aufrufen

  Alt 22. Aug 2003, 01:58
Hallo. Ich habe eine Ressourcen-DLL in Delphi gemacht und habe das jetzt so hinbekommen, dass ich die Ressource, hier ein Bitmap, direkt im Explorer aufrufen kann...

res://C:\ressource.dll/bitmap.bmp

Jetzt wollte ich die Ressource in eine TImage laden und es geht nicht: Die Funktion LoadFromFile kapiert keine res:// Dateien.
In einigen C++ Programmen hab ich das schon gesehen, dass HTMLs in eine DLL geladen werden. Wie kann ich das mit Delphi machen?
Muss ich da die Funktion LoadFromFile umschreiben, oder geht das auch leichter? (Ich will auch DelphiX, WaveSounds, Animationen und Texte in die DLL einfügen, deswegen wäre das eine schlechte Lösung)
Am besten wäre es natürlich, wenn eine Funktion sich die Datei res://C:\ressource.dll/bitmap.bmp holen, tempoär speichern und dann den neuen Dateinamen ausgeben würde... Etwa so...

Code:
Image1.LoadFromFile(Translate('res://res://C:\ressource.dll/bitmap.bmp'));
Danke schon mal im vorraus.
Daniel Marschall
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#2

Re: Ressource in einer DLL von außen aufrufen

  Alt 22. Aug 2003, 02:07
Weil es Quatsch ist. Was der Internet Explorer und Explorer machen ist etwas komplett anderes. Die handlen das selber ... wenn du exakt sowas willst, mußt du es auch selber handlen.

1. LoadLibrary (um die DLL zu laden) -> hModule (Modul-Handle)
2. hBitmap := LoadBitmap(hModule, ...)

... Dann damit arbeiten ... das Handle sollte man TBitmap zuweisen können!
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#3

Re: Ressource in einer DLL von außen aufrufen

  Alt 22. Aug 2003, 04:15
Schau dir mal TBitmap in der Hilfe an, besonders .LoadFromResourceName()/.LoadFromResouceID().

Delphi-Quellcode:
procedure LoadBitmapFromResource(Bitmap: TBitmap; const FileName,BitmapName: String);
begin
  Lib := LoadLibraryEx(FileName, LOAD_LIBRARY_ASDATAFILE);
  if Lib = 0 then
    raise Exception.Create('Ungültige DLL');
  try
    Bitmap.LoadFromResourceName(Lib, BitmapName);
  finally
    FreeLibrary(Lib);
  end;
end;
Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Ressource in einer DLL von außen aufrufen

  Alt 22. Aug 2003, 04:34
@Hagen: Da hat dich dein Ggedächnis im Stichgelassen. In meinem pDSK ist LoadLibraryEx wie folgt deklariert:
Code:
HMODULE LoadLibraryEx(
  LPCTSTR lpFileName,
  HANDLE hFile,
  DWORD dwFlags
);
Wobei:
Zitat:
hFile
This parameter is reserved for future use. It must be NULL.
Ich hätte den Code auch anders aufgebaut. Ich hätte auf ungleich null getestet und dann weitergemacht.
Delphi-Quellcode:
Lib := LoadLibraryEx(FileName, 0, LOAD_LIBRARY_AS_DATAFILE);
if Lib <> 0 then
begin
  try
    ...;
  finally
    FreeLibrary(Lib);
  end;
end
else
  RaisLastOSError();
Aber das ist Geschmackssache.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#5

Re: Ressource in einer DLL von außen aufrufen

  Alt 22. Aug 2003, 06:06
Richtig es ist Geschmackssache. Ich bevorzuge bei solchen kurzen Abfragen die sofortige Auswertung da dadurch der Source besser sequentiell lesbar wird. Lade Library, wenn Fehler raise Exception, ansonsten weiter im Source.

Falls ich die Abfrage so wie du gestalte dann aber auf alle Fälle so

Delphi-Quellcode:
begin
  Lib := LoadLibrary()
  if Lib <> 0 then
  try
  finally
    FreeLibrary(Lib);
  end else
    raise Exception.Create();
end;
Gruß Hagen

PS: appropo Gedächtnis, 5:15 Uhr und schon 18h vor der Kiste was soll da das Hirn noch bringen ?
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 21. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: Ressource in einer DLL von außen aufrufen

  Alt 22. Aug 2003, 11:30
Hallo. Ich hab das jetzt so:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Lib: Integer;
begin
  Lib := LoadLibraryEx('Ressource.dll', 0, LOAD_LIBRARY_AS_DATAFILE);
  if Lib <> 0 then
  try
    Image1.Picture.Bitmap.LoadFromResourceName(Lib, 'TEST.BMP');
  finally
    FreeLibrary(Lib);
  end else
    raise Exception.Create('Fehler in der Ressourcen-DLL...');
end;
Jetzt kommt aber die Meldung, dass Die Ressource "Test.bmp" nicht gefunden worden ist. Was mache ich falsch?

Wie muss ich es eigentlich machen, wenn ich DelphiX-Dateien, Texte für Memos ect. auch einbinden will? Gibts denn keine RessourceToStream-Funktion?

[edit=Daniel B]Delphi-Tags korrigiert. Mfg, Daniel B[/edit]
Daniel Marschall
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 21. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: Ressource in einer DLL von außen aufrufen

  Alt 22. Aug 2003, 23:45
Ich denke mal, dass der Fehler in der DLL liegt...

Was mache ich falsch?

Code:
+ Bitmap
  + 123
    + 0 (Neutral)
Ich hab die Ressourcen mit Resource Hacker der *.dll hinzugefügt.

Feldermeldung: Die Ressource 123 wurde nicht gefunden.
Daniel Marschall
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#8

Re: Ressource in einer DLL von außen aufrufen

  Alt 22. Aug 2003, 23:59
LoadFromResourceID(, 123);
oder
LoadFromResourceName(, MakeIntResource(123));

Gruß Hagen
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 21. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: Ressource in einer DLL von außen aufrufen

  Alt 23. Aug 2003, 00:58
Hallo. Ich hab jetzt folgendes:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Lib: Integer;
begin
  Lib := LoadLibraryEx('Ressource.dll', 0, LOAD_LIBRARY_AS_DATAFILE);
  if Lib <> 0 then
  try
    Image1.Picture.Bitmap.LoadFromResourceName(Lib, MakeIntResource(222));
  finally
    FreeLibrary(Lib);
  end else
    raise Exception.Create('Fehler in der Ressourcen-DLL...');
end;
Jetzt erhalte ich eine Access Violation

[edit=Daniel B]Delphi-Tags korrrigiert. Mfg, Daniel B[/edit]
Daniel Marschall
  Mit Zitat antworten Zitat
Benutzerbild von Flogo
Flogo

Registriert seit: 24. Mär 2003
Ort: Freiburg im Breisgau
317 Beiträge
 
Delphi 7 Professional
 
#10

Re: Ressource in einer DLL von außen aufrufen

  Alt 24. Nov 2003, 20:04
Ich habe genau das gleiche Problem:

Zitat von blackdrake:
Ich hab die Ressourcen mit Resource Hacker der *.dll hinzugefügt.

Feldermeldung: Die Ressource 123 wurde nicht gefunden.
Wenn ich die dll mit delphi "von Hand" erstelle geht alles glatt;
(mit r := TResourceStream.Create(dll, Name, 'BMP') Wenn ich allerdings mit dem Resource Hacker Bilder hinzufüge findet er sie nicht. Hab grade das Board durchsucht und bin auf viele verschiedene Möglichkeiten gestoßen wie man Bilder aus dlls öffnen kann aber keine hat mit dem ResHacker getan.

Wie funktioniert das mit der ID bzw. loadfromresourceNAME()? Wozu ist das MakeIntResource() und tut das nur mit Zahlen oder auch mit Namen?

Mein Prog sieht im Moment genauso aus wie in Blackdrakes letztem Post nur das statt dem 222 eine stringvariable steht und liefert den fehler "Resource 'blabla' nicht gefunden".

Ich hoffe jemand kann mir helfen
If one coincidence can occur, then another coincidence can occur. And if one coincidence happens to occur just after another coincidence, then that is just a coincidence.
DNA

www.Anyxist.de
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:16 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