Вызов функции 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;
}

Ответы на вопрос(2)

Ваш ответ на вопрос