AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dll von *.res Datei laden

Ein Thema von EWeiss · begonnen am 1. Apr 2008 · letzter Beitrag vom 22. Apr 2008
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
EWeiss
(Gast)

n/a Beiträge
 
#1

Dll von *.res Datei laden

  Alt 1. Apr 2008, 06:18
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
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Dll von *.res Datei laden

  Alt 1. Apr 2008, 07:06
Beim Programmstart aus der Ressource ins Temp-Dir extrahieren,

während der laufzeit dynamisch drauf zugreifen und

bein Beenden wieder vom Filesystem entfernen.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

Re: Dll von *.res Datei laden

  Alt 1. Apr 2008, 07:11
Zitat von cruiser:
Beim Programmstart aus der Ressource ins Temp-Dir extrahieren,

während der laufzeit dynamisch drauf zugreifen und

bein Beenden wieder vom Filesystem entfernen.
hmmm die funktionsweise leuschtet mir wohl ein
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
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Dll von *.res Datei laden

  Alt 1. Apr 2008, 07:30
Ungebrüft und absolut ungetestet !!!

Ressource extrahieren
DP: Ressource ... extrahieren

DLL dynamisch laden
Delphi-Quellcode:
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;
Am besten kapselst du die DLL-Funktionen in eine Klasse, dann bleibt der Code schön aufgeräumt
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

Re: Dll von *.res Datei laden

  Alt 1. Apr 2008, 07:35
Zitat von cruiser:
Ungebrüft und absolut ungetestet !!!

Ressource extrahieren
Momento...

DLL dynamisch laden
Delphi-Quellcode:
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;
danke für den Tip .. ja das ist klar nur es gibt keine DLL welche du von irgendeinen Pfad laden kannst
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:
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;
für was steht HInstance?
Da ich keine dll vom Pfad lade .. reicht es nicht wenn man anstelle dessen nur ein 0 übergibt?

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Dll von *.res Datei laden

  Alt 1. Apr 2008, 07:42
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
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

Re: Dll von *.res Datei laden

  Alt 1. Apr 2008, 07:50
Zitat von cruiser:
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
Ja danke aber das weiss ich doch wie man eine DLL einläd darum geht es doch nicht
----
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:
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
Alles schon erledigt und funktioniert auch alles bisher von der Platte
aber das soll es ja nachher nicht mehr.

Zitat:
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
Nein hat sie nicht, denke mal dann ist es das Modul von meiner DLL in der die DLL als resource eingebunden ist.
Werde das mal so versuchen

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Dll von *.res Datei laden

  Alt 1. Apr 2008, 07:54
Zitat von EWeiss:
... eigentlich nur das die Datei nicht öffentlich werden soll ...
mhpuh.. dafür ist das verpacken in die Ressourcen aber auch keine Lösung. Stichwort: Ressource-Editor

Zitat von EWeiss:
... und bei Vista .. keine Ahnung wie sich das verhält könnte es probleme geben
wenn man sich nicht an gewisse Regeln hält. ...
Darum ins Tempdir und nicht in irgendein temporäres Dir

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.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

Re: Dll von *.res Datei laden

  Alt 1. Apr 2008, 07:58
Zitat:
mhpuh.. dafür ist das verpacken in die Ressourcen aber auch keine Lösung. Stichwort: Ressource-Editor
naja mit UPX gepackt und verschlüßelt da ist nix mit Resource Editor
Zitat:
Notfalls entpack die Datei halt als "~tmp1456.dat"
puhh dann kennst du sie ja.. hihiihhi

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Dll von *.res Datei laden

  Alt 1. Apr 2008, 08:04
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 22:33 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