schoess hat geschrieben:Als Erstes einmal: Ich habe keine .lib-files.
Dann ist die Frage, ob Du die zur Lib gehörenden Headerfiles hast, bzw. wo Du diese Lib herhast, bzw. wieso man als Entwickler mit einer Lib arbeitet, zu der man nicht die vollständigen Informationen besitzt. ^^
schoess hat geschrieben:Also kann ich nix dazulinken. Schön wäre es allemal, dazu habe ich auch "GOOGLE- OUTPUT".
Google-Output!?
schoess hat geschrieben:Den Unterschied zwischen dem Prozedere für Subroutinen und Funktionen mag es vielleicht deshalb geben, da ich keine SUBROUTINEN Aufrufe kenne, die einen Rückgabewert haben. Da wird immer ein Pointer für die Rückgabe mit übergeben.
Naja, spricht nicht wirklich für einen nennenswerten Unterschied!?
schoess hat geschrieben:In einer Dokumentation zu einer .dll lese ich nun von FORTRAN Funktionen, die einen Rückgabewert haben.
Deshalb könnte ich mir denken, daß sich da ein Unterschied ergibt. Ich kenne leider nicht viele Beispiele (genauer: nur eins) von Fortran -.dll's, und da werden ausschließlich NUR Subroutinen aufgerufen, wenn ich meine Doku dazu recht verstehe bzw. die nicht lügt.
In Fortran hat sich viel getan... nichts, was erwähnenswert wäre, aber Fortran hat ja auch auf der Lochkarte begonnen...
Es ist durchaus wahrscheinlich, dass man die Idee der Funktion, also eine Subroutine mit Rückgabe, nachträglich eingebaut hat.
schoess hat geschrieben:Kann jemand ein Beispiel für den Aufruf einer FORTRAN Funktion aus einer .dll heraus ( ohne .lib-file, also mit LoadLibrary und GetProcAdress() ) posten? Oder einen Link? Das wäre wirklich sehr nett, ich habe nämlich leider nichts eindeutiges in dieser Richtung gefunden.
Danke jedenfalls schonmal bishierher.
Auf die Schnelle kann ich Dir nur den Link hier geben:
http://www.daniweb.com/software-develop ... ut-typedef#.
Da geht es um den Typedef, aber das Programm ist ja da.
Eine Subroutien, die in Fortran ein double und ein int bekommt, hat in C die Signatur
Entsprechend musst Du Adressen übergeben:
Code: Alles auswählen
double val1 = 1.0;
int val2 = 2;
func( &val1, &val2 );
entsprechend kannst Du sie nicht mit func( 1.0, 2 ) rufen.
Wenn Du den Typedef entsprechend anpasst, müsste das soweit gehen. Mit dem DependencyWalker kannst Du den Namen der Funktion herausfinden. Achte darauf, dass die .dll im %PATH% oder im aktuellen Verzeichnis liegt.
Viele Unsicherheiten, wo etwas schief gehen kann, aber wenn alles richtig eingestellt ist, solltest Du die Funktion ohne weitere Probleme rufen können.
Sicher, dass die DLL es wert ist, nicht in C neu geschrieben zu werden?

Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.