Einzelnen Beitrag anzeigen

grips-net

Registriert seit: 3. Sep 2004
Ort: St. Wendel
50 Beiträge
 
#1

DLL programmieren und einbinden > Runtime Error

  Alt 18. Nov 2004, 11:56
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
  Mit Zitat antworten Zitat