Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Prism Kann meine Fortran dll in Delphi.NET nicht laden (https://www.delphipraxis.net/58457-kann-meine-fortran-dll-delphi-net-nicht-laden.html)

micha382 7. Dez 2005 10:19


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:

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 diesem Code bekomme ich stets die Fehlermeldung, dass die dll nicht geladen werden könne.
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:
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;
Gibt es noch andere Möglichkeiten, eine dll aufzurufen?

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.

Elvis 7. Dez 2005 10:29

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?

Robert Marquardt 7. Dez 2005 10:35

Re: Kann meine Fortran dll in Delphi.NET nicht laden
 
Delphi-Quellcode:
external 'MULTIPLY.dll' name MULTIPLY;
Sollte das nicht
Delphi-Quellcode:
external 'MULTIPLY.dll' name 'MULTIPLY';
heissen?
Bitte pruefen ob die Funktion auch unter diesem Namen exportiert wird.
Die wahrschainlichste Calling-Convention ist stdcall.

micha382 7. Dez 2005 10:36

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.

Luckie 7. Dez 2005 10:43

Re: Kann meine Fortran dll in Delphi.NET nicht laden
 
Wird die DLL überhaupt gefunden:
Delphi-Quellcode:
MyDLL := System.Environment.CurrentDirectory +'\MULTIPLY.dll';
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.

micha382 7. Dez 2005 10:59

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:

Robert Marquardt 7. Dez 2005 11:00

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.

Luckie 7. Dez 2005 11:04

Re: Kann meine Fortran dll in Delphi.NET nicht laden
 
Zitat:

Zitat von micha382
@ Luckie

Die Datei ist im bin-Verzeichnis des Projektes gespeichert und sie wird auch gefunden.

Dir ist aber klar, dass über den Open- oder Savedialog das Arbeitsverzeichnis geändert wird oder wenn der Anwender in der Verknüpfung ein anderes Arbeitsverzeichnis angibt? Und dann funktioniert das nämlich nicht mehr.

micha382 7. Dez 2005 11:12

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...

micha382 7. Dez 2005 11:33

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 07:22 Uhr.
Seite 1 von 2  1 2      

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