AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Funktion aus der Dll aufrufen?

Ein Thema von egal · begonnen am 14. Sep 2004 · letzter Beitrag vom 14. Sep 2004
Antwort Antwort
Seite 2 von 3     12 3      
egal

Registriert seit: 14. Jul 2004
190 Beiträge
 
Delphi XE4 Professional
 
#11

Re: Funktion aus der Dll aufrufen?

  Alt 14. Sep 2004, 13:29
Zitat von Luckie:
Und jetzt noch die Funktion in der DLL und wie du sie exportiert hast. Dann kann man dir eventuell weiterhelfen.
die dll wurde mit Hilfe von Fortran-Compiler geschrieben, da muss man nur entsprechnede Befehle in command-line schreiben und er erstellt selber die Dll. Die Funktion wurde in Fortran geschrieben, hier ist die Quellcode:
Delphi-Quellcode:
        integer function vpunk(t)
         !DEC$ ATTRIBUTES DLLEXPORT :: vpunk
         integer t
         integer a,b
         a=2
         b=3
         vpunk = a*b+2-t
        end function vpunk
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#12

Re: Funktion aus der Dll aufrufen?

  Alt 14. Sep 2004, 13:30
So sollte es gehen:
Delphi-Quellcode:
function VPUNK(t2:integer) : integer; stdcall;

implementation

{$R *.dfm}

function VPUNK(t2:integer) : integer; external 'quelle.dll'; stdcall; // rufe diese
  Mit Zitat antworten Zitat
egal

Registriert seit: 14. Jul 2004
190 Beiträge
 
Delphi XE4 Professional
 
#13

Re: Funktion aus der Dll aufrufen?

  Alt 14. Sep 2004, 13:36
Zitat von scp:
So sollte es gehen:
Delphi-Quellcode:
function VPUNK(t2:integer) : integer; stdcall;

implementation

{$R *.dfm}

function VPUNK(t2:integer) : integer; external 'quelle.dll'; stdcall; // rufe diese
bekomme Zugriffsverletzungmeldung und Ergebnis ist auch falsch
  Mit Zitat antworten Zitat
egal

Registriert seit: 14. Jul 2004
190 Beiträge
 
Delphi XE4 Professional
 
#14

Re: Funktion aus der Dll aufrufen?

  Alt 14. Sep 2004, 13:39
Zitat von Ultimator:
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.[/color]
Ich bin gar nicht sicher, dass es in Fortran auch stdcall gibt.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#15

Re: Funktion aus der Dll aufrufen?

  Alt 14. Sep 2004, 14:00
Dann probier einfach alle Direktiven durch:
register, cdecl, pascal und safecall. Mehr kann der der Delphi-Compiler auch nicht.
  Mit Zitat antworten Zitat
egal

Registriert seit: 14. Jul 2004
190 Beiträge
 
Delphi XE4 Professional
 
#16

Re: Funktion aus der Dll aufrufen?

  Alt 14. Sep 2004, 14:22
Zitat von Dax:
Dann probier einfach alle Direktiven durch:
register, cdecl, pascal und safecall. Mehr kann der der Delphi-Compiler auch nicht.
mit register bekomme ich wie früher den alten falschen Ergebnis, bei anderen dieselbe Fehlermeldung.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#17

Re: Funktion aus der Dll aufrufen?

  Alt 14. Sep 2004, 14:25
In Delphi gibt es ja die MS-Calling-Convention __fastcall nicht, auch andere werden nicht unterstützt. Womöglich kompiliert FORTRAN deine DLL mit einer dieser nicht unterstützten und du merkst es nicht. Versuch doch mal, in FORTRAN die COnventions vorzugeben, dann brauchst du sie in Delphi nur noch abzuschreiben.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#18

Re: Funktion aus der Dll aufrufen?

  Alt 14. Sep 2004, 14:57
Moin!

Laut dieser Website nutzt Fortran die cdecl Calling Convention. Also ist eigentlich nur dies das richtige.

Und wegen der Zugriffsverletzung: Ich hatte auch mal ein paar Fortran DLL Funktionen zu implementieren und diese haben alle bei Parameter einen Zeiger auf diesen erwartet. Also probier es zusätzlich mal aus den Aufrufparameter als Var zu deklarieren. Dazu musst du dann wahrscheinlich eine lokale Variable deklarieren für den Aufruf aber damit klappte es dann bei der Fortran DLL.

MfG
Muetze1
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#19

Re: Funktion aus der Dll aufrufen?

  Alt 14. Sep 2004, 15:11
Also, ich habe auch mal durch die Quicktime API und anderes mit cdecl zu tun gehabt. Das ist auf jeden Fall etwas kniffeliger als die anderen und produziert auch schon mal AVs. Eine gute Lösung habe ich bis jetzt noch nicht gefunden, das mit den VAR-Parametern könnte aber durchaus hinhauhen.

EDIT:
Zitat von Assarbad's Tutorial:
Bei allen Konventionen außer cdecl entfernt die Funktion die Parameter selbst vom Stack (in Delphi geschieht dies durch das Stackframe-Handling automatisch). Bei cdecl ist der Aufrufer dafür zuständig.
Heisst das man muss da extra ein paar Zeilen Code für schreiben, wenn ja was?
  Mit Zitat antworten Zitat
egal

Registriert seit: 14. Jul 2004
190 Beiträge
 
Delphi XE4 Professional
 
#20

Re: Funktion aus der Dll aufrufen?

  Alt 14. Sep 2004, 15:45
Zitat von Muetze1:
Moin!

Laut dieser Website nutzt Fortran die cdecl Calling Convention. Also ist eigentlich nur dies das richtige.

Und wegen der Zugriffsverletzung: Ich hatte auch mal ein paar Fortran DLL Funktionen zu implementieren und diese haben alle bei Parameter einen Zeiger auf diesen erwartet. Also probier es zusätzlich mal aus den Aufrufparameter als Var zu deklarieren. Dazu musst du dann wahrscheinlich eine lokale Variable deklarieren für den Aufruf aber damit klappte es dann bei der Fortran DLL.

MfG
Muetze1
wo genau: in Fortran oder Delphi? Für Code wäre ich besonders dankbar!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 02:58 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