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 programm in dll (https://www.delphipraxis.net/11180-programm-dll.html)

Illuminator-23-5 1. Nov 2003 15:30


programm in dll
 
ich möcht ein prog in einer dll programmieren, sprich alla nonVCL. ich hab mir damit ein paar tutorials durchgelesen, habs aber immer nur mit Handles gefunden. Ich möchts aber ohne handle machen. geht das?
das prog sollte dann durch ein bestimmes ereignis geschlossen werden. starten würd ich das ganze dann mit shellExecute

Luckie 1. Nov 2003 15:50

Re: programm in dll
 
Ein Programm in einer DLL? Was soll das werden? Und was hat das mit Handles zu tun?

Illuminator-23-5 1. Nov 2003 16:10

Re: programm in dll
 
das sollte ein versuch werden
eine Art nonVCL-Prog, nur in einer dll
Und ich habs immer nur mit dem Fenster gefunden, nie ohne, sprich dass das Prog im hintergrund läuft und das Fenster über einen Hook geöffnet wird!

Assarbad 1. Nov 2003 16:17

Re: programm in dll
 
??? Kannst du mal bitte allgemein anerkannte Grammatikregeln des Deutschen benutzen ???

Du willst was?:

1. DLL die ein Fenster erzeugt und anzeigt?
2. DLL die kein Fenster erzeugt?
3. Eine DLL mit oder ohne Hook?

DLLs brauchen IMMER eine Hostanwendung welche sie lädt. Lies dir bitte erstmal die Grundlagen an.

Luckie 1. Nov 2003 16:20

Re: programm in dll
 
Also, Unterschied Programm DLL.

Ein Programm enthält allein ausführbaren Code. Der Loader läd die Anwendung in den Speicher, ruft CreateProcess auf, um den Prozess zu erzeugen (Adressraum bereitstellen, Kernel-Objekt erzeugen). Dann folgt ein Aufruf von CreateThread, um den primären Thread zu starten, der den eigentlichen Code ausführt. Der Prozess selbst führt keinen Code aus, er dient nur als Container für die Threads, welche den eigentlichen Programm-Code dann ausführen.

Eine DLL kann selbst keinen Code ausführen. Eine DLL enthält nur Code der von einem Prozess / Thread ausgeführt werden kann. Dazu wird die DLL in den Adressraum des Prozesses geladen, wo durch der Thread dann Zugriff auf die exportierten Codeteile (Funktionen) der DLL hat.

Was man aber mache kann ist: Die DLL laden und einen Thread starten dessen Code in der DLL liegt. Auf alle Fälle brauchst du einen Prozess, der den Adressraum zur Verfügung stellt und einen Thread, der die DLL läd und den Code der DLL ausführt.

Hmpf, war einer schneller. :cry:

Illuminator-23-5 1. Nov 2003 16:25

Re: programm in dll
 
ich will ein programm
1. in einer dll
2. ohne/mit fenster (wechsebar)
3. mit hooks
4. das mit rundll32.exe ausgeführt wird

Luckie 1. Nov 2003 16:28

Re: programm in dll
 
Und warum darf es keine normale Anwendung sein?

Illuminator-23-5 1. Nov 2003 16:39

Re: programm in dll
 
ich hab mit einem kollegen gewettet, dass es möglich ist, dass ein programm, das keine exe hat, ausgeführt werden kann (über ein anderes Prog)
das möcht ich dann auch noch ausweiten, weil es irgendwie lustig ist!

himitsu 1. Nov 2003 17:28

Re: programm in dll
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi ihr,

ich hatte das mal andersrum versucht. (DLL in einer EXE)

Hab das Projekt derzeit aber nicht zur Hand, deshalb hier nur ein nicht so ideales aber funktionierendes Beispiel.

Vielleicht hilft es ja.

Theoretisch geht das auch so wie du es brauchst, weis aber nicht mehr wie man die DLL starten muß, so das Windows denkt es währe eine EXE (was es ja im Grunde genommen auch ist).

Illuminator-23-5 1. Nov 2003 17:41

Re: programm in dll
 
ausführen is nicht mein problem, das ging ja so:
Delphi-Quellcode:
ShellExecute(0,'','%windir%\System32\rundll32.exe','Test.dll,Main',nil,0);
und Main ist eine prozedur, die am anfang ausgeführt, sprich das hauptprogramm
hat irgendwie geholfen! thx!

Illuminator-23-5 1. Nov 2003 17:51

Re: programm in dll
 
so menschlich kann irren sein:
mein
ShellExecute(0,'','%windir%\System32\rundll32.exe' ,'Test.dll,Main',nil,0);

funzt doch nicht:(
wie kann man das dann ausführen?

himitsu 1. Nov 2003 18:46

Re: programm in dll
 
So in etwas hatte ich das vorhin auch schon versucht, bloß ohne das ",Main".
"rundll32.exe" ist, glaube ich zumindestens, schon der richtige Weg.


DLL in EXE => EXE in DLL
Wenn du es rausfindest, hier die Änderungen im Project1.dpr meines Beispiels:
"Program Project1;" => "Library Project1;"
(ergibt "Project1.exe" => "Project1.dll")

Und für Unit2.pas:
"Project1.exe" => "Project1.dll"
Delphi-Quellcode:
  Function berechnen(W1, W2: Integer): Integer; external 'Project1.dll';

Illuminator-23-5 1. Nov 2003 19:04

Re: programm in dll
 
ohne das main funzts auch noch nicht, da muss noch was dran (glaub ich)

das importieren der funktion löst glaub ich auch nicht das problem, da dann die dll nicht von rundll32.exe sondern vom anderen Programm geladen wird!
Das programm darf eben nur dazu dienen, die dll auszuführen, die dann auch noch weiterlaufen sollte, wenn man das programm beendet!

himitsu 1. Nov 2003 19:21

Re: programm in dll
 
Das es MIT und OHNE dem ",Main" nicht geht hab ich doch gemerkt und glaube auch gesagt.
Das es geht weis ich auch, aber das wie ... ist mir entfallen.

PS. Die Bsp. sollen ja nur zeigen, das es möglich ist DLL und EXE zu vermischen. Jetzt müssten wir nur noch raus bekommen wie diese sch** DLL aufgerufen werden muß, so das sie alleine läuft.

SirThornberry 1. Nov 2003 20:00

Re: programm in dll
 
Öhm, ich versteh jetzt nicht wo das problem ist. Du kannst doch ganz normal eine Anwendung basteln und dann das was in der DPR datei ist in ein DLL-Projekt packen. Und dann das ganze kompilieren...

SirThornberry 1. Nov 2003 20:03

Re: programm in dll
 
@himitus: eine DLL kann nicht allein laufen, sie kann maximal in einer anderen Anwendung laufen und wenn das nur die rundll32.exe ist...

himitsu 1. Nov 2003 20:06

Re: programm in dll
 
Das ist doch das Prob, wie startet man die dort (rundll32.exe) :?:

Daniel B 1. Nov 2003 20:12

Re: programm in dll
 
Zitat:

Zitat von himitsu
Das ist doch das Prob, wie startet man die dort (rundll32.exe) :?:

Schaumal da, der vorletzte Beitrag, da ist ein Beispiel mit drin, wie man die RunDLL zum ausführen nutzen kann.
http://www.delphipraxis.net/viewtopic.php?t=2915

SirThornberry 1. Nov 2003 20:33

Re: programm in dll
 
wenn du das mit der rundll und dem starten der dll nicht hinn bekommst schreib dir ne eigene hostapplication die eine beliebige dll einbindet...

himitsu 1. Nov 2003 20:41

Re: programm in dll
 
Liste der Anhänge anzeigen (Anzahl: 1)
He Illuminator-23-5,
jetzt haben wir's doch endlich :firejump:

'en kleines Script (Start.bat) und das war's:
RunDLL32.exe Project1.dll,RunDLL

:oops: Na gut, der kleine Fehler beim beenden. Aber darum ging es ja nicht.

Illuminator-23-5 2. Nov 2003 11:06

Re: programm in dll
 
das funzt wunderbar! super! danke!
ich denk, den fehler kann ich irgendwie ausmerzen (ok, nicht wirklich, einfach das fenster gleich wieder schließen...)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:22 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