Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Dll von *.res Datei laden (https://www.delphipraxis.net/111242-dll-von-%2A-res-datei-laden.html)

EWeiss 1. Apr 2008 07:08

Re: Dll von *.res Datei laden
 
Zitat:

Zitat von cruiser
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.

bitte nicht zu ernst nehmen :drunken: :mrgreen:

Nein ;)

Bin auch nicht so pingelig..
Meine Datei ist die BassVis welche von Developern im Forum von Un4Seen in deren projekte eingebunden wird
um verschiedene arten von Visualisations Plugins auszuführen.

Ich will denen nicht zumuten sich mit dieser zusätzlichen DLL rumzuschlagen deshalb will ich allen eventualitäten vorbeugen.
Die müssen ja nicht wissen das in BassVis noch ne DLL versteckt ist.

auch wenn man es jetzt weiss.
Zitat:

HA! ich habs... du hast keine Lizenz für die komerzielle DLL !!!
na hab sie selbst unter schwersten bedingungen in C++ geschrieben mit unterstützung natürlich
ist lediglich ein Wasabi Wrapper für die neuen Winamp Plugins der code in c++ läßt sich leider in Delphi
wegen der Classen nicht übersetzen .. aber eagl

gruss EMil

Luckie 1. Apr 2008 08:24

Re: Dll von *.res Datei laden
 
Zitat:

Zitat von EWeiss
eigentlich nur das die Datei nicht öffentlich werden soll

Und was ist an deiner DLL so geheimnisvoll, dass sie auf keinen Fall abgespeichert werden darf?

Zitat:

und bei Vista .. keine Ahnung wie sich das verhält könnte es probleme geben
wenn man sich nicht an gewisse Regeln hält.
Nein auch bei Vista hat der Benutzer uneingeschränkten Zugriff auf sein temporäres Verzeichnis, sonst würden wahrscheinlich mehr als die Hälfte aller Programme nicht mehr laufen.

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
Warum sollte er alle Funktionen in einer Klasse kapseln? Das macht bei einer DLL eigentlich nur Probleme, da man nicht ohne weiteres Objektinstanzen zwischen Exe und DLL austauschen kann. Und welche Aufrufkonvention erwählt, ist so ziemlich egal. Er muss sich eben nur daran halten.

Wenn du sie unbedingt aus der Ressource laden willst, dann dürftest du wesentlich mehr Probleme unter Vista bekommen, als wenn du sie ins temporäre Verzeichnis entpackst. Du kannst dir ja mal Nicos Code angucken, wie er eine Exe aus den Speicher ausführt: http://www.michael-puff.de/Developer.../Importe/Nico/ -> inmemexe.zip.

EWeiss 1. Apr 2008 09:11

Re: Dll von *.res Datei laden
 
Zitat:

Und was ist an deiner DLL so geheimnisvoll, dass sie auf keinen Fall abgespeichert werden darf?
Na ja will ich nicht sagen das sie nicht darf..

Es sind halt undokumentierte Wasabi Funktionen enthalten die ich mir mühsam erarbeitet habe.
Bei offenlegung der DLL kann sie jeder für seine zwecke nutzen nur dafür habe ich mir nicht die mühe gemacht.
In verbindung mit BassVis kein problem solange sie nur dort verwendet wird.

Nicht mal im Forum von Winamp wollte man mir helfen.. :wall:
Denke alleine das ist ein grund diese nicht publik zu machen.

Werde mir das Sample mal anschauen .. Danke

gruss Emil

QuickAndDirty 1. Apr 2008 09:49

Re: Dll von *.res Datei laden
 
Wenn du wirklich nur die Funktionen brauchst und nicht die Load und Unload Events
dann könnte ich mir vorstellen das du darauf zugreifen kannst.
Du müstest vorher die relativen Adressen der
Funktionen mit GetProcAddress ermitteln und notieren.
Dann die Res in den Stream laden und die Proceduralen
variablen mit den entsprechenden Zeigern belegen.

Ich weiß nicht ob das bei DLLs funktioniert aber mit *.com Dateien (kein Datenregister) konnte man sowas früher machen.

Und du wirst bei solchen Actionen (s. inmemexe.exe) auf jedenfall probleme mit Virenscannern bekommen. Mein Kasperski meckert
einen heur.Trojan.generic an bei Michaelpuffs inmemexe und heutzutage verzichtet kaum ein Scanner auf heuristic.

Tatsächlich willst du ja Daten als Code ausführen...das ist das verhalten eines Virus.


Vielleicht hilft es Dir die Datei nicht nur im $TempDir abzulegen sondern auch ein flag zu setzen dem Zufolge die Datei beim Schließen vom Betriebssystem gelöscht wird...das macht zwar auch probleme mit Virenscannern....

EWeiss 1. Apr 2008 09:55

Re: Dll von *.res Datei laden
 
Zitat:

Und du wirst bei solchen Actionen (s. inmemexe.exe) auf jedenfall probleme mit Virenscannern bekommen. Mein Kasperski meckert
einen heur.Trojan.generic an bei Michaelpuffs inmemexe und heutzutage verzichtet kaum ein Scanner auf heuristic.
benutze ich nicht und eine exe ist es auch nicht von daher ?.. ;)

habe da, glaube ich das richtige gefunden
vielleicht ist es auch für andere ganz interessant

http://www.joachim-bauch.de/tutorial...ll_memory.html

This tutorial describes a technique how a dynamic link library (DLL)
can be loaded from memory without storing it on the hard-disk first.

genau das was ich erreichen will.

gruss Emil

Luckie 1. Apr 2008 10:02

Re: Dll von *.res Datei laden
 
Auch wenn es gehen mag, halte ich das für den falschen Weg. Zum einem, weil es wohl undokumentiert ist, das heißt, du musst bei jedem Update prüfen, ob es noch funktioniert und das bei zich Systemen und Konfigurationen. Du wirst also nie sicherstellen können, dass es läuft. Und zum anderem wird jemand der an die Funktionen will und deine Exe debuggt, sehr schnell sehen, was Sache ist und hat sich deine DLL ohne weiteres aus der Ressource mit einem Resourcenhacker extrahiert.


Zitat:

Zitat von EWeiss
Zitat:

Und du wirst bei solchen Actionen (s. inmemexe.exe) auf jedenfall probleme mit Virenscannern bekommen. Mein Kasperski meckert
einen heur.Trojan.generic an bei Michaelpuffs inmemexe und heutzutage verzichtet kaum ein Scanner auf heuristic.
benutze ich nicht und eine exe ist es auch nicht von daher ?.. ;)

Du nicht und die Benutzer deiner Anwendung? Und ich wäre mir nicht so sicher, dass Antivirenscanner bei DLLs, die aus dem Speicher geladen werden nicht auch ansprechen, weil letztendlich unterscheiden sich Exe-Dateien und DLLs nicht großartig, nur dass DLLs eben keinen Einsprungspunkt haben.

EWeiss 1. Apr 2008 10:08

Re: Dll von *.res Datei laden
 
Zitat:

Auch wenn es gehen mag, halte ich das für den falschen Weg.
ja das nehme ich dir ab..

werde es erstmal ausgibig testen davon abgehen kann ich immer noch.
muss mich mal informieren ob das den Leuten genehm ist wenn sie 2 DLL's bekommen

gruss Emil

cruiser 1. Apr 2008 19:02

Re: Dll von *.res Datei laden
 
Zitat:

Zitat von Luckie
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
Warum sollte er alle Funktionen in einer Klasse kapseln? Das macht bei einer DLL eigentlich nur Probleme, da man nicht ohne weiteres Objektinstanzen zwischen Exe und DLL austauschen kann. Und welche Aufrufkonvention erwählt, ist so ziemlich egal. Er muss sich eben nur daran halten.

Klarer Fall von falsch verstanden. Ich meinte nicht das übergeben von Instanzen, sondern das Kapseln der Funktionen. Beim Erzeugen eines Objects kann man die extrahieren und laden, und beim zerstören wieder löschen. Die Methoden der Klasse greifen dann intern auf die Funktionen der DLL zurück. Ich seh da eigentlich keine Probleme, oder habe ich etwas übersehn?

EWeiss 2. Apr 2008 04:02

Re: Dll von *.res Datei laden
 
hab mich jetzt entschieden..
Mache es wie cruiser vorgeschlagen hat.

aus resource extrahieren
Attribute auf hidden , dann nach Anwender /Lokale Einstellungen/temp
Beim beenden dll löschen (was es nicht immer tut (Zugriff verweigert)
---------
Eigentlich müßte das gehen DLL (Winamp Plugin) wird entladen
in "Finalize" der letzte aufruf bevor BassVis geschlossen wird
mit DeleteFile zum Pfad der extrahierten dll diese löschen..

dürfte eigentlich kein zugriff mehr sein.

gruss Emil

EWeiss 2. Apr 2008 15:46

Re: Dll von *.res Datei laden
 
Uwe sagt mir das ich eine *.obj Datei in Delphi einbinden kann
Nun habe ich diese dem Projekt hinzugefügt als Meldung kommt

[Pascal Error] Winamp_IO.pas(138): E2045 Bad object file format: GetAPIService.obj'

Delphi-Quellcode:
{$MINENUMSIZE 4}
{$ALIGN ON}
{$L GetAPIService.obj}
jetzt frage ich mich ob es daran liegt das sie mit MSVC erstellt wurde..

jemand irgendwelche informationen darüber warum es nicht geht ?
bzw.. geht es theoretisch wenn ich diese mit Borland c++ erstelle und compiliere.(müßte dann erst noch installieren)

Das wäre denke ich die optimale lösung für mein DLL problem

gruss Emil


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:46 Uhr.
Seite 2 von 4     12 34      

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