Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Funktion aus der Dll aufrufen? (https://www.delphipraxis.net/29754-funktion-aus-der-dll-aufrufen.html)

egal 14. Sep 2004 11:43


Funktion aus der Dll aufrufen?
 
Das Problem liegt darin, dass dll in Fortran mit Hilfe von Fortran-Compiler geschrieben wurde. Delphi findet schon Funtion in dieser Dll, ich kann die sogar aufrufen, aber ich bekomme total falschen Wert. Hier ist ein Teil von meiner Quellcode:

Delphi-Quellcode:
function VPUNK(t2:integer) : integer; external 'quelle.dll'; // rufe diese funktion VPUNK auf.

implementation

{$R *.dfm} 

procedure TForm1.Button1Click(Sender: TObject);
var cPfad, c1 : string;
     a,t2: integer;
begin
  t2 := 3;
  a := VPUNK(t2); // verwende sie
  c1:= inttostr(a);
Statt 6 bekomme ich so ein Ergebnis: -2334563. Und ich weiß jetzt nicht genau, wo liegt der Fehler: entweder in Dll oder ich mache in meiner Code was falsch? Danke. 8)

sakura 14. Sep 2004 11:44

Re: Funktion aus der Dll ausrufen?
 
Hi egal,

verwende doch bitte die [delphi]-Tags ;-)

...:cat:...

egal 14. Sep 2004 11:46

Re: Funktion aus der Dll ausrufen?
 
Zitat:

Zitat von sakura
Hi egal,

verwende doch bitte die [delphi]-Tags ;-)

...:cat:...

ok, habe geändert

Luckie 14. Sep 2004 11:56

Re: Funktion aus der Dll aufrufen?
 
Schreib mal den betreffenden Quellcodeteil komplett hin. Mit den Bruchstücken kann man nicht viel anfangen.

scp 14. Sep 2004 12:03

Re: Funktion aus der Dll aufrufen?
 
Vielleicht liegt es daran:
Delphi-Quellcode:
function VPUNK(t2:integer) : integer; external 'quelle.dll'; stdcall;
In der Regel werden DLL-Funktionen mit der Aufrufkonvention stdcall deklariert, sollte das auch nicht klappen kannst du es auch mal mit cdecl probieren.

egal 14. Sep 2004 12:09

Re: Funktion aus der Dll aufrufen?
 
Zitat:

Zitat von Luckie
Schreib mal den betreffenden Quellcodeteil komplett hin. Mit den Bruchstücken kann man nicht viel anfangen.

Delphi-Quellcode:
 
function VPUNK(t2:integer) : integer; external 'quelle.dll';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
 var cPfad, c1 : string;
     a,t2: integer;
begin
  t2 := 3;
  a := VPUNK(t2);
  c1:= inttostr(a);
Ist so besser?

egal 14. Sep 2004 12:14

Re: Funktion aus der Dll aufrufen?
 
Zitat:

Zitat von scp
Vielleicht liegt es daran:
Delphi-Quellcode:
function VPUNK(t2:integer) : integer; external 'quelle.dll'; stdcall;
In der Regel werden DLL-Funktionen mit der Aufrufkonvention stdcall deklariert, sollte das auch nicht klappen kannst du es auch mal mit cdecl probieren.

Mit stdcall bekomme ich Fehlermeldungen:
Zitat:

[Fehler] Unit1.pas(27): Deklaration von 'VPUNK' unterscheidet sich von vorheriger Deklaration
, wenn stdcall am Ende von Funktionsdeklaration steht und wenn vor external, dann bekomme ich eine Zugriffsverletzung in meiner Dll.

Ultimator 14. Sep 2004 12:20

Re: Funktion aus der Dll aufrufen?
 
Das mit den unterschiedlichen Deklarationen kommt vermutlich daher, dass du stdcall sowohl oben als auch unten bei der procedur anschreiben musst, also so:
Delphi-Quellcode:
function VPUNK(t2:integer) : integer; external 'quelle.dll'; stdcall;
.
.
.
function VPUNK(t2:integer) : integer; external 'quelle.dll'; stdcall; // rufe diese funktion VPUNK auf.
t2: integer;
t2 := 3;
a := VPUNK(t2); // verwende sie.
Denk ich mal (ist zwar doof beschreiben, aber ich denke man sieht, was gemeint ist ;-) )

Hab mich verguckt, ist natürlich murks, was ich da geschrieben hab.
Du musst sowohl im Code der DLL ein stdcall; ranhängen als auch in der Unit, in der du sie verwendest.

Luckie 14. Sep 2004 12:20

Re: Funktion aus der Dll aufrufen?
 
Und jetzt noch die Funktion in der DLL und wie du sie exportiert hast. Dann kann man dir eventuell weiterhelfen.

egal 14. Sep 2004 12:25

Re: Funktion aus der Dll aufrufen?
 
Zitat:

Zitat von Ultimator
Das mit den unterschiedlichen Deklarationen kommt vermutlich daher, dass du stdcall sowohl oben als auch unten bei der procedur anschreiben musst, also so:
Delphi-Quellcode:
function VPUNK(t2:integer) : integer; external 'quelle.dll'; stdcall;
.
.
.
function VPUNK(t2:integer) : integer; external 'quelle.dll'; stdcall; // rufe diese funktion VPUNK auf.
t2: integer;
t2 := 3;
a := VPUNK(t2); // verwende sie.
Denk ich mal (ist zwar doof beschreiben, aber ich denke man sieht, was gemeint ist ;-) )

ich habe jetzt die ganze Quellcode angelegt, guck mal da bitte. Verstehe nicht ganz, wo muss ich stdcall noch einmal schreiben, wenn ich schon am Anfang bekomme meine Fehlermeldung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz