![]() |
Dll von *.res Datei laden
Habe eine Resourcendatei erstellt und dort eine DLL eingebunden
wie kann ich die jetzt aus dieser laden ? Hab hier schon gesucht aber keine Infos gefunden Also nicht aus einer EXE oder DLL sondern aus der *.res Datei gruss Emil |
Re: Dll von *.res Datei laden
Beim Programmstart aus der Ressource ins Temp-Dir extrahieren,
während der laufzeit dynamisch drauf zugreifen und bein Beenden wieder vom Filesystem entfernen. |
Re: Dll von *.res Datei laden
Zitat:
dann will ich sie auch nicht auf die Platte schreiben sondern mit MemoryModule direkt im speicher ausführen. Die DLL hat nur eine größe von 3,5 K da macht es keinen sinn die Datei im projekt mit auszuliefern. mit welcher API oder reicht da
Delphi-Quellcode:
var
DLL : Pointer; begin irgendwas.machmal := DLL, Pchar('geladen'); end; nein im ernst ein kleines sample wäre nicht schlecht oder zumindest die API funktionen die ich benutzen muss. gruss Emil |
Re: Dll von *.res Datei laden
Ungebrüft und absolut ungetestet !!!
Ressource extrahieren ![]() DLL dynamisch laden
Delphi-Quellcode:
Am besten kapselst du die DLL-Funktionen in eine Klasse, dann bleibt der Code schön aufgeräumt
type
TMyFunc = function (p: PChar): Boolean; var mylib: THandle; myfunc: TMyFunc; begin mylib := LoadLibrary(PChar('Pfad\zu\meiner.dll')); if mylib <> 0 then begin myfunc := TMyFunc(GetProcAddress(mylib, PChar('myfunc'))); if myfunc(PChar('blah')) then begin { weiss auch nich :P } end; end; FreeLibrary(mylib); end; |
Re: Dll von *.res Datei laden
Zitat:
habe es aber auch oben geschrieben .. trotzdem Danke Ich möchte meine DLL welche sich in meiner 'additional.res' befindet in den speicher zu laden. dort wird sie direkt ausgeführt ohne sie auf die Platte zu speichern EDIT: habe mir das beispiel mal angeschaut!
Delphi-Quellcode:
für was steht HInstance?
procedure TForm1.Button1Click(Sender: TObject);
var ResStream: TResourceStream; begin ResStream := TResourceStream.Create(HInstance, 'Sounds', 'WAV'); ResStream.SaveToFile('Sound1.wav'); // brauch ich nicht ResStream.Free; end; Da ich keine dll vom Pfad lade .. reicht es nicht wenn man anstelle dessen nur ein 0 übergibt? gruss Emil |
Re: Dll von *.res Datei laden
Was spricht dagegen sie über einen TRessourcestream und Savetofile ins Tempdir zu extrahieren?
Wie das geht hab ich im Post oben mal was hier aus dem Board verlinkt. Wie du ans Tempdir kommst findest du in der Library Ah ja... hab es oben nicht so explizit geschrieben... kapsel am besten alle Funktionen der DLL in eine Klasse. Bei einer c-DLL gehört hinter den Func-Type glaube(!!!) noch ein cdecl; als Aufrufkonvention Ich hab mich das letzte mal vor Jahren durch sowas gequält und freu mich derzeit mehr an C# und .NET und denke deshalb Andern können dir bei näheren Problemen (oder meinen gelegten Bug-Eiern) besser helfen. Edit zu deinem Edit: HInstance ist das Modul, dass gerade ausgeführt wird, also deine Exe-Datei, die auch die Ressource drin hat. HInstance ist eine Konstante. Ich weiss nicht ob die 0 ist... also nimm einfach HInstance :mrgreen: |
Re: Dll von *.res Datei laden
Zitat:
---- eigentlich nur das die Datei nicht öffentlich werden soll und bei Vista .. keine Ahnung wie sich das verhält könnte es probleme geben wenn man sich nicht an gewisse Regeln hält. Das möchte ich alles vermeiden. Für den Tip bzw. das suchen von TRessourcestream nochmal danke.. hilft mir schonmal weiter Wenn man nicht weiss wonach man suchen soll ist das schon aussichtlos von vornherein ;) Zitat:
aber das soll es ja nachher nicht mehr. Zitat:
Werde das mal so versuchen :) gruss Emil |
Re: Dll von *.res Datei laden
Zitat:
Zitat:
Notfalls entpack die Datei halt als "~tmp1456.dat" wenn du dir nur über die Endung sorgen machst. Sollte LoadLibrary auch schlucken (hoff ich). Aber wirklich sicher bekommste es nicht. |
Re: Dll von *.res Datei laden
Zitat:
Zitat:
gruss Emil |
Re: Dll von *.res Datei laden
Dann hol ich das Modul eben spätestens aus dem Speicher... mal im Ernst... wenn es alles sooo top-secret ist wirst du um eine verschlüsselte Verbindung zu einem Webservice nicht herum kommen.
HA! ich habs... du hast keine Lizenz für die komerzielle DLL !!! bitte nicht zu ernst nehmen :drunken: :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:12 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