![]() |
DLL programmieren und einbinden > Runtime Error
Hallo!
Ich habe eine DLL erstellt, die eine Funktion enthält. Dieser Funktion wird ein ShortString übergeben, dieser wird verarbeitet und das Ergebnis wieder zurückgegeben. Da zur Verarbeitung Komponeneten (Indy) notwendig sind, wird während der Laufzeit dynamisch eine Form erzeugt, auf der diese Komponeneten liegen. Die Form soll nicht angezeigt werden. Das ganze sieht dann so aus:
Delphi-Quellcode:
Die DLL habe ich anschließend wie folgt ein ein Testprogramm eingebunden:
uses
SysUtils, Forms, Dialogs, IdHttp, IdAntiFreeze, Classes, ShareMem, components in 'components.pas' {FormComponents}; {$R *.res} procedure NewExit; begin FormComponents.Free; end; function getHTTP(sURL: ShortString) : ShortString; stdcall; var sReturnValue : ShortString; begin try sReturnValue := FormComponents.IdHTTP1.Get(sURL); except sReturnValue := 'http.dll: Bei der Verbindungsanforderung ist ein Fehler aufgetreten'; end; result := sReturnValue; end; exports getHTTP; begin FormComponents := TFormComponents.Create(Application); AddExitProc(NewExit); end.
Delphi-Quellcode:
Zuerst die gute Nachricht: Die Anwendung läuft und die eingebundene Funktion kann beliebig oft korrekt ausgeführt werden
function getHTTP(sURL: ShortString) : ShortString; stdcall;external 'http.dll';
procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Text := getHttp(Edit1.Text); end; Die schlechte Nachricht aber: Beim Beenden der Anwendung kommt es zu einer ungültigen Zeigeropertion. Egal ob die Funktion innerhalb der DLL aufgerufen wurde oder nicht. Ich kann leider nicht erkennen ob oder dass ich irgendwo etwas vergessen hätte - wohl auch weil mir im Umgang mit DLLs noch Erfahrung fehlt. Wäre nett, wenn mir jemand einen entscheidenden Tipp geben könnte. Grüße aus dem Saarland Michael |
Re: DLL programmieren und einbinden > Runtime Error
Hi,
was mir so direkt auffällt ist, dass ShareMem als erste Unit eingebunden werden muss. Wäre möglich, dass das zu deinem Fehler führt. [EDIT] Da du nur ShortString übergibst kannst du dir die Unit ShareMem aber auch komplett sparen. [/EDIT] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:20 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-2025 by Thomas Breitkreuz