Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi DLL programmieren und einbinden > Runtime Error (https://www.delphipraxis.net/34161-dll-programmieren-und-einbinden-runtime-error.html)

grips-net 18. Nov 2004 11:56


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:
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.
Die DLL habe ich anschließend wie folgt ein ein Testprogramm eingebunden:

Delphi-Quellcode:
function getHTTP(sURL: ShortString) : ShortString; stdcall;external 'http.dll';


procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Text := getHttp(Edit1.Text);
end;
Zuerst die gute Nachricht: Die Anwendung läuft und die eingebundene Funktion kann beliebig oft korrekt ausgeführt werden
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

Niko 18. Nov 2004 14:14

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 03:20 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