Autor Beitrag
fishhed
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 77


Delphi 7
BeitragVerfasst: Di 06.03.07 12:13 
Hallo,

ich teste gerade die Abeit mit DLLs. Leider schlage ich mich mit Fehlermeldungen rum, obwohl der Aufruf der Dll scheinbar funktioniert.

Dies ist meine DLL
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
library dllPdf;

uses
  SysUtils,
  Classes;

{$R *.res}

function erzeugePdf(sName: string): stringstdcall;
begin
  Result := 'klappt';
end;

exports
  erzeugePdf;

begin
end.


Dies ist das aufrufende Programm:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function erzeugePdf(sName: string): stringstdcallexternal 'dllPdf.dll';


procedure TForm1.Button1Click(Sender: TObject);
begin
  showmessage(erzeugePdf('klappt es?'));
end;

end.


Wenn ich das Programm ausführe und auf Button1 klicke bekomme ich erst den String aus der DLL angezeigt(-->'klappt').
Danach bekomme ich leider folgende Fehlermeldung:

"Im Projekt Aufruf.exe ist eine Exception der Klasse EInvalidPointer mit der Meldung "Ungültige Zeigeroperation" aufgetreten! ..."

Woran liegt das?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 06.03.07 12:36 
Hast du dir durchgelesen, was der DLL Wizzard als Kommentar ganz zu Anfang in die Datei geschrieben hat? Ansonsten: www.michael-puff.de/..._07_String_DLL.shtml
fishhed Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 77


Delphi 7
BeitragVerfasst: Di 06.03.07 12:41 
Okay, ich glaube ich habs selber hinbekommen. Ich habe den String 'nullterminiert'.
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Di 06.03.07 13:52 
user profile iconfishhed hat folgendes geschrieben:
Ich habe den String 'nullterminiert'.

Das heißt, du typecastest im Programm einen PChar und übergibst diesen der DLL, wodurch du auf FastShareMem bzw. ShareMem verzichten kannst, oder? Das selbe Problem hab ich übrigens auch mal gepostet... Suche in: Delphi-Forum, Delphi-Library SIMPELSTE DLL, mein Thread ;)

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.