Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Programm mit DLL > Fehlermeldung nach eigentlicher Procedur (https://www.delphipraxis.net/15701-programm-mit-dll-fehlermeldung-nach-eigentlicher-procedur.html)

Thorben86 2. Feb 2004 20:05


Programm mit DLL > Fehlermeldung nach eigentlicher Proced
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi, ich bin gerade bei nem Programm, wo ich 2 Proceduren in ne Dll ausgelagert hab. Die ein klappt ja auch, soll nur ne datei löschen, aber die andere macht immer ne fehlermeldung, obwohl die keinen sinn macht.

Delphi-Quellcode:
Code inner DLL:
procedure statistik(user:pchar;rank,versuche,nummer:integer);
var ini:TiniFile;
begin
user:=pchar(InputBox('Statistik', 'Bitte Namen eingeben', ''));
if(user='') then
user:='Unbenannt';
ini := TIniFile.Create(ExtractFilePath(Application.exename)+'Raten.dat');
ini.WriteString('Wichtig','Wichtig','Wenn Sie diese Datei Löschen, gehen alle Daten der Statistik verloren!');
ini.WriteString(InttoStr(nummer),verschluesseln('Rank'),verschluesseln(InttoStr(rank)));
ini.WriteString(InttoStr(nummer),verschluesseln('Name'),verschluesseln(user));
ini.WriteString(InttoStr(nummer),verschluesseln('Versuche'),verschluesseln(InttoStr(versuche)));
ini.UpdateFile;
ini.free;
end;
Delphi-Quellcode:
Im Programm:
type
Tstatistik = procedure;

procedure statistik(user:pchar;rank,versuche,nummer:integer);


procedure Tf_raten.statistik(user:pchar;rank,versuche,nummer:integer);
   var statistik: Tstatistik;
    Handle: THandle;
begin
Handle:=LoadLibrary(PChar('statistikdll.dll'));
if Handle <> 0 then
   begin
        @statistik := GetProcAddress(Handle, 'statistik');
        if @statistik <> nil then
           begin
           statistik;
           end;
        FreeLibrary(Handle);
   end;
   showmessage('ende');
end;
Das geniale hier ist, dass er die Message 'Ende' auch noch anzeigt und erst wenn die Procedure eigentlich fertig ist, amcht er ne fehlermeldung(liegt nich an der Message :wink: )
Fehlermeldungen sind im anhang, wäre zu aufwändig die abzutippen :coder:
1., ist die direkte Fehlermeldung und die 2. die, die erscheint, wenn mann dei anwendung dann über delphi neustartet.
Kann mir jemand sagen, wass ich da falsch gemacht hab???

FriFra 2. Feb 2004 20:14

Re: Programm mit DLL > Fehlermeldung nach eigentlicher Pr
 
Ich hatte vor kurzem auch so ein Problem mit einer dll. Ich habe allerdings eine function in der dll und da ist mir dann aufgefallen, dass man das Result erst ganz am Schluss zuweisen darf, da die Hauptapplikation sonst sofort bei Zuweisung z.B. eines Defaultwertes meint die Funktion wäre abgearbeitet und arbeitet mit diesem Rückgabewert weiter.
Das Problem an der Sache scheint zu sein, dass die procedure nur "angekickt" wird, aber nicht synchron zum Hauptthread ausgeführt wird. Anschliessend wird die dll entladen, obwohl die procedure noch nicht fertig ist und dann crasht es. Versuch mal eine Function draus zu machen und erst ganz am Schluss z.B. Result:=True zuzuweisen, dann sollte das Hauptprogramm "warten"...


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