AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi DLL programmieren und einbinden > Runtime Error
Thema durchsuchen
Ansicht
Themen-Optionen

DLL programmieren und einbinden > Runtime Error

Ein Thema von grips-net · begonnen am 18. Nov 2004 · letzter Beitrag vom 18. Nov 2004
Antwort Antwort
grips-net

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

DLL programmieren und einbinden > Runtime Error

  Alt 18. Nov 2004, 12: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
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#2

Re: DLL programmieren und einbinden > Runtime Error

  Alt 18. Nov 2004, 15:14
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]
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:45 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