AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Prism Kann meine Fortran dll in Delphi.NET nicht laden
Thema durchsuchen
Ansicht
Themen-Optionen

Kann meine Fortran dll in Delphi.NET nicht laden

Ein Thema von micha382 · begonnen am 7. Dez 2005 · letzter Beitrag vom 7. Dez 2005
Antwort Antwort
Seite 1 von 2  1 2      
micha382

Registriert seit: 4. Nov 2005
Ort: Lyon(Frankreich)
10 Beiträge
 
Delphi 8 Professional
 
#1

Kann meine Fortran dll in Delphi.NET nicht laden

  Alt 7. Dez 2005, 11:19
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.dllname 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...

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.
Micha
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#2

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

  Alt 7. Dez 2005, 11:29
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 Giesecke
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#3

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

  Alt 7. Dez 2005, 11:35
external 'MULTIPLY.dllname MULTIPLY; Sollte das nicht
external 'MULTIPLY.dllname 'MULTIPLY'; heissen?
Bitte pruefen ob die Funktion auch unter diesem Namen exportiert wird.
Die wahrschainlichste Calling-Convention ist stdcall.
  Mit Zitat antworten Zitat
micha382

Registriert seit: 4. Nov 2005
Ort: Lyon(Frankreich)
10 Beiträge
 
Delphi 8 Professional
 
#4

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

  Alt 7. Dez 2005, 11:36
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.
Angehängte Dateien
Dateityp: dll multiply_435.dll (10,0 KB, 3x aufgerufen)
Micha
Michael Reiser
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

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

  Alt 7. Dez 2005, 11:43
Wird die DLL überhaupt gefunden:
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
micha382

Registriert seit: 4. Nov 2005
Ort: Lyon(Frankreich)
10 Beiträge
 
Delphi 8 Professional
 
#6

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

  Alt 7. Dez 2005, 11:59
@ 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?
Micha
Michael Reiser
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#7

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

  Alt 7. Dez 2005, 12:00
Die DLL importiert ausschliesslich von salflibc.dll. Wahrscheinlich kann diese DLL (oder weitere abhaengige DLLs) nicht gefunden werden.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

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

  Alt 7. Dez 2005, 12:04
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
micha382

Registriert seit: 4. Nov 2005
Ort: Lyon(Frankreich)
10 Beiträge
 
Delphi 8 Professional
 
#9

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

  Alt 7. Dez 2005, 12:12
@ 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...
Micha
Michael Reiser
  Mit Zitat antworten Zitat
micha382

Registriert seit: 4. Nov 2005
Ort: Lyon(Frankreich)
10 Beiträge
 
Delphi 8 Professional
 
#10

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

  Alt 7. Dez 2005, 12:33
@ Luckie

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.
Micha
Michael Reiser
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:42 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