Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DLL-Funktion synchron ausführen... (https://www.delphipraxis.net/15322-dll-funktion-synchron-ausfuehren.html)

FriFra 26. Jan 2004 15:06


DLL-Funktion synchron ausführen...
 
Ich habe in einer temporär gebudenen dll eine Funktion... leider wird die Bindung der dll schon gelöst, während die Funktion noch läuft. Wie kann ich erreichen, dass mein Hauptprogramm wartet bis die Funktion tatsächlich abgearbeitet ist?

Tonic1024 26. Jan 2004 15:14

Re: DLL-Funktion synchron ausführen...
 
Hi...

Hast du die DLL in nem Thread laufen? Sonst brauchst du eigentlich nur die Funktion aufrufen, DLL laden, und erst kurz bevor die Funktion zurückspringt - also direkt vor dem END - freeLibrary aufrufen...

Das sollte reichen...

Wenn du in nem Thread arbeitest musst du mit nem Flag oder sowas tricksen...

FriFra 26. Jan 2004 15:56

Re: DLL-Funktion synchron ausführen...
 
Ich habe gerade etwas merkwürdiges festgestellt...

Die verwendete DLL-Funktion ist boolean... Wenn ich bereits am Beginn der Funktion den Result Wert mit False initialisiere, wird die Funktion praktisch nicht abgearbeitet! Nur wenn ich erst ganz am Ende Result := True angebe, dann wird die Funktion abgearbeitet.
Was soll den das? Bisher ging ich immer davon aus, das der Rückgabewert erst am Ende der Funktion zurückgegeben wird... bei Funktionen dynamisch gebundener DLL's soll das anders sein? :gruebel:

Tonic1024 26. Jan 2004 15:59

Re: DLL-Funktion synchron ausführen...
 
Hm...

Wenn du eine Variable nicht definitiv mit einem Wert belegst, würde ich mich nie darauf verlassen, dass ein sinnvoller Wert drinnen steht. Es ist zwar so, das delphi das von sich aus fast immer sehr gut hinbekommt, aber mit dynamik klappt vieles nicht mehr automatisch...

Würd mich nicht wundern, wenn das einfach so ist!

FriFra 26. Jan 2004 16:17

Re: DLL-Funktion synchron ausführen...
 
Anscheinend bekommt mein Hauptprogramm schon bei der Binding der DLL einen Zeiger auf deren Rückgabewert. Wenn ich nun hingehe und diesen Rückgabewert in der ersten Zeile der DLL-Funktion initialisiere meint mein Hauptprogramm tatsächlich, die Funktion wäre schon durch und macht mit diesem Wert weiter...
Das Fatale daran ist, dass dabei nicht einmal der finally Block der bettr. Funktion abgearbeitet wird, was nätürlich schwere Konsequenzen hat!
Ich habs getestet und nur:
Delphi-Quellcode:
Result := False;
Result := True;
hineingeschrieben... das Ergebnis war immer False, bis ich die erste Zeile gelöscht habe :wall:

Und ich habe hier schon tagelang nach der Quelle div. unerklärlicher Schutzverletzungen gesucht :? ...

Nun frage ich mich, ist es grundsätzlich so, dass man bei exportierten Funktionen den Rückgabewert erst am Schluss angeben darf, oder was läuft bei mir schief? :gruebel:


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