Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi DLL beenden? [FEHLER] (https://www.delphipraxis.net/168389-dll-beenden-%5Bfehler%5D.html)

1Molotow1 18. Mai 2012 11:56

DLL beenden? [FEHLER]
 
Hallo zusammen, ich habe wieder ein Problemchen.
Und zwar habe ich eine DLL, die zwei Threads hat, die dauerhaft laufen.

Nun möchte ich nach einer gewissen Zeit die DLL "beenden". Ich habe diese Funktion gefunden, aber leider crasht dadurch nur die exe.
Code:
function KillDll(aDllName: string): Boolean;
var
  hDLL: THandle;
  aName: array[0..10] of char;
  FoundDLL: Boolean;
begin
  StrPCopy(aName, aDllName);
  FoundDLL := False;
  repeat
    hDLL := GetModuleHandle(aName);
    if hDLL = 0 then
      Break;
    FoundDLL := True;
    FreeLibrary(hDLL);
  until False;
end;
Kann mir da jemand weiterhelfen, wie ich die DLL beendet bekomme?

implementation 18. Mai 2012 12:02

AW: DLL beenden? [FEHLER]
 
Kommt die DLL von dir? Wenn nicht, hast du Zugang zum Quellcode?
Wie bindest du die DLL ein?

Wenn du an den Quellcode kommst, kannst du der DLL ja einfach eine Prozedur spendieren, die die Threads stoppt, und diese dann aus der Echse heraus aufrufen.

1Molotow1 18. Mai 2012 12:21

AW: DLL beenden? [FEHLER]
 
Hallo, erstmal danke für deine Hilfe.

Die DLL ist von mir, also hab ich den Source.
Aber ist es überhaupt möglich einen String zu übergeben, wenn die DLL bereits eingebunden ist?

jaenicke 18. Mai 2012 12:53

AW: DLL beenden? [FEHLER]
 
Einen String zu übergeben ist keine gute Idee. Wenn du Sharemem als erste Unit eingebunden hast (bei Programm und DLL), dann geht es zwar, aber Sinn macht es nicht wirklich.

Übergib einfach einen PAnsiChar bzw. PWideChar an die DLL-Funktion und damit hast du eine saubere Schnittstelle. Aber wozu brauchst du denn überhaupt einen String für die Beendigung der Threads?

1Molotow1 18. Mai 2012 13:03

AW: DLL beenden? [FEHLER]
 
Naja, ich arbeite erst seit kurzer Zeit mit DLL's, kenne mich damit also noch nicht wirklich aus.

Aber irgendwo her muss die DLL doch wissen wann die Threads beendet werden sollen.
Und da die EXE weiß wann die DLL nicht mehr benötigt wird, dachte ich mir, übergebe ich einen String damit auch die DLL weiß wann sie aufhören kann.

jaenicke 18. Mai 2012 13:09

AW: DLL beenden? [FEHLER]
 
Wie wäre es, wenn du gar nichts übergibst und einfach eine Funktion ohne Parameter in der DLL baust, die deine Exe dann aufruft?

1Molotow1 18. Mai 2012 17:41

AW: DLL beenden? [FEHLER]
 
Also ich habe jetzt wieder einige Zeit rum probiert... Allerdings ohne Erfolg.
Hast du vielleicht ein Beispiel dafür? jaenicke?
Wäre dir sehr Dankbar.

jaenicke 18. Mai 2012 18:45

AW: DLL beenden? [FEHLER]
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich verstehe nicht wo du nicht weiter kommst. Was hast du denn versucht?

Ein Beispiel ist einfach, ja... Siehe Anhang...


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