![]() |
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:
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: )
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; 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??? |
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 13:55 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 by Thomas Breitkreuz