Вызов функции C из Фортрана, где имя функции C было первоначально передано из C
По причинам, которые не имеют отношения к делу, мне нужно передать имя функции C / C ++ в подпрограмму Fortran, которая, в свою очередь, вызывает эту функцию C. Я обнаружил, что могу успешно передать имя функции в подпрограмму Fortran. В этой подпрограмме я могу вызвать правильную функцию Си. Тем не менее, аргументы функции C нарушаются при этом вызове (при вызове непосредственно из C он работает нормально). я использовалСвязывание ISO C попытаться заставить это работать, но безрезультатно.
Вот MWE:
fortranRoutine.h:extern "C" {
void fortranRoutine_(void(int status));
};
calledfromFortran.h:void calledfromFortran(int status);
main.cpp:#include "fortranRoutine.h"
#include "calledfromFortran.h"
using namespace std;
int main(int argc, char** argv) {
calledfromFortran(12);
fortranRoutine_(calledfromFortran);
return 0;
}
fortranRoutine.f90:subroutine fortranRoutine(calledfromFortran)
use iso_c_binding
implicit none
interface
subroutine calledfromFortran(status) bind (c)
use iso_c_binding
integer(kind = c_int), intent(in) :: status
end subroutine calledfromFortran
end interface
integer(kind = c_int) :: one
one = 2
call calledfromFortran(one)
return
end subroutine fortranRoutine
calledfromFortran.cpp:#include
#include "stdlib.h"
using namespace std;
void calledfromFortran(int status) {
cout < "In calledfromFortran:" < endl;
cout < " status: " < status < endl;
}