Llamar a una función C desde Fortran donde el nombre de la función C se pasó originalmente desde C

Por razones que no son relevantes, debo pasar un nombre de función C / C ++ a una subrutina Fortran, que, a su vez, llama a esa función C. Lo que he encontrado es que puedo pasar con éxito el nombre de la función a la subrutina Fortran. En esa subrutina puedo llamar a la función C correcta. Sin embargo, los argumentos de la función C se rompen en esta llamada (cuando se llama directamente desde C, funciona bien). he utilizadoEncuadernación ISO C para tratar de hacer que esto funcione, en vano.

Aquí hay un MWE:

fortranRoutine.h:
extern "C" {
    void fortranRoutine_(void(int status));
};
llamado desde Fortran.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 <iostream>
#include "stdlib.h"

using namespace std;

void calledfromFortran(int status) {
    cout << "In calledfromFortran:" << endl;
    cout << " status: " << status << endl;
}
Resultados actuales

Ejecutando esto actualmente da:

In calledfromFortran:
 status: 12
In calledfromFortran:
 status: -1641758848

La primera llamada acalledfromFortran desdemain Funciona correctamente, pero cuando se llama desdefortranRoutine el valor está roto Tenga en cuenta que cada vez que se ejecuta ese último valor cambia. ¿Qué estoy haciendo mal?

Respuestas a la pregunta(2)

Su respuesta a la pregunta