Fehler beim Einbinden einer Fortran dll in C++
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 schreiben
Antwort 1 von asok vom 25.08.2019, 03:30 Options
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.