![]() |
Kann meine Fortran dll in Delphi.NET nicht laden
Hallo zusammen.
Ich habe das Problem, dass ich in Fortran geschriebene dll's in Delphi8 nicht öffnen kann. Ich habe für den Anfang eine Funktion geschrieben, die eine Integer mit zwei multipliziert: In Delphi benutze ich dann folgenden Code um die dll zu aufzurufen:
Delphi-Quellcode:
Mit diesem Code bekomme ich stets die Fehlermeldung, dass die dll nicht geladen werden könne.function MULTIPLY(var N : integer) : integer; cdecl; // habe es auch mit safecall, stdcall, // register etc. versucht external 'MULTIPLY.dll' name MULTIPLY; procedure Main.Button1_Click(sender: System.Object; e: System.EventArgs); begin N := strtoint(TextBox1.Text); MULTIPLY(N); TextBox1.Text := convert.ToString(N); end; Mit Delphi dll's gibt es dagegen kein Probleme, ausserdem läuft besagte Fortran dll in Delphi7... :gruebel: Ich habe es auch über ein Interface versucht, das war allerdings auch nicht von Erfolg gekrönt:
Delphi-Quellcode:
Gibt es noch andere Möglichkeiten, eine dll aufzurufen?
type
IWin32DLLInt = interface function MULTIPLY (var N : integer): integer; end; var N : integer; MyDLL : string; MyWin32DLL : IWin32DLLInt; begin MyDLL := System.Environment.CurrentDirectory +'\MULTIPLY.dll'; if not Supports(MyDLL, IWin32DLLInt, MyWin32DLL) then info := 'Ne peut pas charger MULTIPLY.dll' else begin MyWin32DLL.MULTIPLY(N); end; end; für FORTRAN-Experten: Brauche ich dafür einen speziellen Compiler (ich benutze FTN95)? Ich weiss, dass dies kein FORTRAN Forum ist, aber vielleicht hatte ja schonmal jemand ein ähnliches Problem. Danke. |
Re: Kann meine Fortran dll in Delphi.NET nicht laden
Magst du vllt die DLL oder eine minimalistische Version, die die gleichen Zickereien verursacht hochladen?
Dein Code sieht für mich nach Win32 Code aus, war das da dein D7 oder D8 Code? |
Re: Kann meine Fortran dll in Delphi.NET nicht laden
Delphi-Quellcode:
Sollte das nicht
external 'MULTIPLY.dll' name MULTIPLY;
Delphi-Quellcode:
heissen?
external 'MULTIPLY.dll' name 'MULTIPLY';
Bitte pruefen ob die Funktion auch unter diesem Namen exportiert wird. Die wahrschainlichste Calling-Convention ist stdcall. |
Re: Kann meine Fortran dll in Delphi.NET nicht laden
Liste der Anhänge anzeigen (Anzahl: 1)
Es handelt sich um den Delphi8- Code. Ich schreibe eigentlich eine Web-Anwendung habe den Code allerdings auch für win32- Anwendungen ausprobiert. In Delphi7 läuft's, in Delphi8 nicht...
Ich hänge die dll mal an. |
Re: Kann meine Fortran dll in Delphi.NET nicht laden
Wird die DLL überhaupt gefunden:
Delphi-Quellcode:
Wenn CurrentDirectory das macht, was ich denke, dass es macht, nämlich das aktuelle Arbeitsverzeichnis liefern, dann muss das nicht das Verzeichnis sein, wo die DLL liegt.
MyDLL := System.Environment.CurrentDirectory +'\MULTIPLY.dll';
|
Re: Kann meine Fortran dll in Delphi.NET nicht laden
@ Luckie
Die Datei ist im bin-Verzeichnis des Projektes gespeichert und sie wird auch gefunden. Es gab ja mit der Delphi dll, die am selben Ort gespeichert ist, derlei Probleme nicht... Es gibt dann Probleme, die DLL zu laden. Ich habe mal versucht, die DLL als Referenz zu laden, das gab es folgende Fehlermeldung: "C:\...\MULTIPLY.dll ist weder eine korrekte Typ- Bibliothek, noch ein 'assembly' oder COM Objekt" (die sinngemässe Übersetzung aus dem Frz.) Vielleicht liegt der Fehler darin, dass die dll von Delphi nicht als solche eerkannt wird... Doch warum klappt es dann in Delphi7? :wall: |
Re: Kann meine Fortran dll in Delphi.NET nicht laden
Die DLL importiert ausschliesslich von salflibc.dll. Wahrscheinlich kann diese DLL (oder weitere abhaengige DLLs) nicht gefunden werden.
|
Re: Kann meine Fortran dll in Delphi.NET nicht laden
Zitat:
|
Re: Kann meine Fortran dll in Delphi.NET nicht laden
@ Robert
Ich schau' mir das nochmal genauer an. Ich kann aber doch einen Wert an eine dll übergeben, ohne dass diese 'weiss' von wem sie den Wert übergeben bekommt, oder? Das ist doch die Idee dahinter, dass du eine dll quasi in jeden Code einfügen kannst. Sorry für die Frage, aber es ist das erste Mal, dass ich mich mit DLL's befasse... |
Re: Kann meine Fortran dll in Delphi.NET nicht laden
@ Luckie
:wiejetzt: Eigentlich wollte ich nicht, dass der Anwender bestimmt, welche dll bnutzt wird. Die dll soll eigentlich an ihrem Platz bleiben: zusammen mit dem Programm im localhost-Verzeichnis des (lokalen) Servers. Und es soll immer nur diese eine Datei benutzt werden. Unser Problem ist eigentlich etwas grösser: Ich habe ein Programm geschrieben, in das eine Optimisation eingebettet werden soll. Unser Spezialist für sowas schreibt allerdings nur in FORTRAN, unsere Anwendungen laufen aber alle in Delphi.NET... Die mini-dll hier ist nur dazu da herauszufinden, ob und wie die Übergabe zwischen Delphi und der DLL funktioniert. Ich habe auch probiert, den gesamten Pfad zu geben, allerdings lässt Delphi nach 'external' nur einen String zu und wenn du dort den Pfad reinschreibst, berücksichtigt er ihn nicht als solchen und sucht nach einer Datei die 'C:\...\MULTIPLY.dll' heisst. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:14 Uhr. |
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