Supportnet / Forum / Anwendungen(Java,C++...)
Fehler beim Einbinden einer Fortran dll in C++
Frage
Ich habe versucht eine Fortran dll in C++ einzubinden. (LoadLibrary, GetProcAdress).
Die Dll wird auch geladen, beim Aufruf der Funktion bekomme ich allerdings eine Fehlermeldung:
\chkesp.cThe value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention
In Fortran soll sich die Funktion folgendermaßen aufrufen lassen
FUNCTION(CHAR* C1, CHAR*2, INTEGER)
Ich habe meine funktion mit typedef definiert. gibt es möglicherweise Probleme mit den Datentypen zwischen fortran und c++?
Antwort 1 von asok
Die Fehlermeldung sagt alles aus.
Die "calling convention" legt fest, wie die Parameterübergabe an Funktionen abläuft. Das ist je nach Sprache / Compiler unterschiedlich, bspw. von Fortran nach C++.
Du kannst Einfluss darauf nehmen, indem du die calling convention deiner Funktion (im typedef) so wählst, dass sie der der Fortran-Funktionen entspricht. Welche das ist, weiss ich nicht, aber es gibt in der Regel nur vier zur Auswahl (cdecl, stdcall, fastcall, pascal). Also sieh in deiner Compiler-Doku nach, wie man die Aufrufkonvention festlegt (das ist auch überall anders), und probier alle aus.
Die "calling convention" legt fest, wie die Parameterübergabe an Funktionen abläuft. Das ist je nach Sprache / Compiler unterschiedlich, bspw. von Fortran nach C++.
Du kannst Einfluss darauf nehmen, indem du die calling convention deiner Funktion (im typedef) so wählst, dass sie der der Fortran-Funktionen entspricht. Welche das ist, weiss ich nicht, aber es gibt in der Regel nur vier zur Auswahl (cdecl, stdcall, fastcall, pascal). Also sieh in deiner Compiler-Doku nach, wie man die Aufrufkonvention festlegt (das ist auch überall anders), und probier alle aus.

