AGB  ·  Datenschutz  ·  Impressum  







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

DLL EntryPoint

Ein Thema von Neutral General · begonnen am 21. Mär 2007 · letzter Beitrag vom 22. Mär 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

DLL EntryPoint

  Alt 21. Mär 2007, 16:48
Hi,

Wenn ich meine DLL mit der rundll32.exe starten will dann bekomm ich immer Ärger wegen dem EntryPoint weil ich nicht genau weiß was ich da angeben soll...

Im Moment mach ich das mit ner .bat und zwar so:

Zitat:
rundll32.exe Meine.dll,_DllMainCRTStartup
_DllMainCRTStartup hab ich in MSDN unter DllMain gefunden...

Dll-Code:
Delphi-Quellcode:
library Meine;

// [...]

procedure DllMain(Reason: Integer);
begin
  case Reason of
    DLL_PROCESS_ATTACH: DisableThreadLibraryCalls(hInstance);
    DLL_THREAD_ATTACH : ;
    DLL_THREAD_DETACH : Running:= false;
    DLL_PROCESS_DETACH: Running:= false;
  end;
  if Assigned(DLLProcNext) then DLLProcNext(Reason);
end;

// [...]

begin
  DllProc := @DllMain;
  ShowMessage('hey!'); <-- zum debuggen nur
  DLLProcNext := Pointer(InterlockedExchange(Integer(@DLLProc), Integer(@DLLMain)));
  DLLMain(DLL_PROCESS_ATTACH);

  Thread:= CreateThread(nil, 0, TFNThreadStartRoutine(@ThreadProc),nil, 0, ThreadID); // unwichtig für das Problem
  if Thread <> 0 then CloseHandle(Thread); // dito
end.
Ohne die erste Zeile gibts immer ne Fehlermeldung das der EntryPoint <ZweiterParameter> nicht existiert und es passiert NIX. Mit dieser Zeile bekomm ich die ShowMessage angezeigt aber danach verabschiedet sich das ganze mit ner AV und nem Overflow....
Ich verzweifel noch bald an dem ganzen DLL-Kram-.-

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#2

Re: DLL EntryPoint

  Alt 21. Mär 2007, 17:01
Hab zwar nie was mit der rundll32.exe gemacht, ist das nicht der Name eines Exports?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: DLL EntryPoint

  Alt 21. Mär 2007, 17:01
Hallo,

lade dir bei MS den Dependency Walker herunter (umsonst).
Dann öffne deine DLL damit, er zeigt dir u.a. auch die
exportierten Funktionsnamen an.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: DLL EntryPoint

  Alt 21. Mär 2007, 17:15
rundll32 lädt deine DLL, führt eine Funktion daraus aus, und entlädt die DLL wieder. Die Initialisierung wird dabei automatisch durchgeführt.

Du musst also nicht den Entry-Point der DLL angeben, sondern die Funktion aus der DLL, die ausgeführt werden soll - schreibe dir zur Not eine Dummy-Funktion dafür.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: DLL EntryPoint

  Alt 21. Mär 2007, 17:19
Naja meine DLL/Funktion hat/ist eine (fast)Endlosschleife... Ist das schlimm ?^^

Kann ich in der Funktion DllMain aufrufen oder wird DllMain trotzdem benutzt? weil dann könnte ich die Endlosschleife bei DLL_PROCESS_DETACH oder DLL_THREAD_DETACH beenden...

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: DLL EntryPoint

  Alt 21. Mär 2007, 17:24
Zitat von Neutral General:
Kann ich in der Funktion DllMain aufrufen oder wird DllMain trotzdem benutzt?
Zitat von Flocke:
Die Initialisierung wird dabei automatisch durchgeführt.
Das meinte ich mit dem Satz eigentlich.

rundll32 macht eigentlich nichts besonderes:
1. ein LoadLibrary mit deiner DLL
2. ein GetProcAddress mit der angegebenen Funktion
3. diese wird aufgerufen (mit den Parametern)
4. die DLL wird mit FreeLibrary wieder freigegeben
5. rundll32.exe wird beendet

Bei einer Endlosschleife würdest du ja PROCESS_DETACH nie bekommen, da rundll32 auf ewig auf die Rückkehr aus deiner Funktion wartet.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#7

Re: DLL EntryPoint

  Alt 21. Mär 2007, 17:26
Bei seinem Code würde die Dll wieder entladen werden, da er einen neuen Thread erstellt.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: DLL EntryPoint

  Alt 21. Mär 2007, 17:33
mhh also ich hab in CMD mal

Zitat:
Meine.dll, MeineFunktion
aufgerufen und das Programm war am laufen und CMD hat nicht weitergemacht.. weil rundll32 noch beschäftigt war... Ist die Endlosschleife denn Schlimm? Bzw. WENN sie schlimm ist... Was mach ich dagegen?

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: DLL EntryPoint

  Alt 21. Mär 2007, 23:13
Zitat von Neutral General:
Ist die Endlosschleife denn Schlimm? Bzw. WENN sie schlimm ist... Was mach ich dagegen?
Nö, schlimm ist das nicht. Eine EXE-Datei würde ja wahrscheinlich genau so lange laufen.

Du musst mal ausprobieren, ob der Shutdown vernünftig klappt. Ansonsten vielleicht wie Brechi schrieb die Arbeit in einen Thread auslagern und in der Funktion selbst ein verstecktes Fenster erzeugen, das auf WM_ENDSESSION reagiert.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: DLL EntryPoint

  Alt 21. Mär 2007, 23:55
Warum eigentlich eine DLL und kein normales Programm?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:23 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