Announcement

Collapse
No announcement yet.

EInvalid Pointer Meldung beim Beenden des Programms

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • EInvalid Pointer Meldung beim Beenden des Programms

    Hallo,

    ich habe zum Test eine kleine Dll geschrieben:

    uses
    Sharemem,
    SysUtils,
    Classes;

    function Test(aString: String): String;
    begin
    result:=aString+';Hallo';
    end;

    exports
    Test;

    Im Projekt funktioniert es auch, nur wenn ich das Programm Beende bekomme ich die Fehlermeldung EInvalid Pointer bzw. RunTime Error 217 at 00002C5A. Im Projekt steht ebenfalls an der ersten Stelle die Unit Sharemem für den Speichermanager.

    Vielen Dank im voraus
    Baldemaier Florian

  • #2
    Hallo,

    ist auch wirklich in der DPR-Projektdatei des Programms (nicht der DLL) die Unit ShareMem an erster Stelle eingebunden? Ich kann diesen Fehler nicht reproduzieren:

    <b>DLL:</B>
    <pre>
    library DLLTEST;

    uses
    ShareMem, SysUtils, Classes;

    {$R *.RES}

    function Test(aString: String): String;
    begin
    Result := aString + ';Hallo';
    end;

    exports
    Test;

    begin
    end.
    </pre>
    <b>Programm-Projektdatei:</b>
    <pre>
    program CltDLLTEST;

    uses
    ShareMem, Forms,
    CltDLLTESTFrm in 'CltDLLTESTFrm.pas' {Form1};

    {$R *.RES}

    begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
    end.
    </pre>
    <b>Aufruf der DLL im Programm:</b>
    <pre>
    function Test(aString: String): String; external 'DLLTEST.DLL';

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    ShowMessage(Test('Test'));
    end;
    </pre&gt

    Comment


    • #3
      Danke für deine Antwort, ich habe den Fehler gefunden. Ich habe nur in der Unit des Formulars Sharemem eingebunden, jedoch nicht in der Programm Projekt Datei (dpr). Muß ich Sharemem in allen Units des Projekts verwenden ? (Projekt Datei, Unit Datei, Dll Projekt usw.)

      Vielen Dank
      Baldemaier Floria

      Comment


      • #4
        Ist es möglich in einer Dll, eine globale Variable zu deklarien?<br>
        Hab schon versucht das ganze über Filemapping zu probieren, hat aber bislang<br>
        nicht funktioniert?<br>
        In der Hilfe lese ich nur von Speicherzuordnungstabellen?<br&gt

        Comment


        • #5
          Hallo Florian,

          nein - die Unit Sharemem muss nur in der DPR-Datei an erster Stelle stehen.

          Nun zur Frage von Michael: <br>
          Delphi kann - im Gegensatz zu C - keine Variable aus einer DLL exportieren. Wenn man allerdings den Zugriff in Schnittstellenprozeduren verpackt, ist das Auslesen oder Schreiben einer Variable wieder möglich (analog zu den Set- und Get-Methoden bei VCL-Eigenschaften). Man muss dann diese Schnittstellenprozeduren exportieren, damit die Anwendung darauf zugreifen kann

          Comment

          Working...
          X