Creando una interfaz FORTRAN a una función C que devuelve un char *

He estado retrasado en esto durante aproximadamente una semana, ahora, y he buscado foro tras foro para obtener una explicación clara de cómo enviar un char * de C a FORTRAN. Para hacer el asunto más frustrante, enviar un argumento char * de FORTRAN a C fue sencillo ...

Enviando un argumento char * de FORTRAN a C (esto funciona bien):

// The C header declaration (using __cdecl in a def file):
extern "C" double GetLoggingValue(char* name);

Y de FORTRAN:

! The FORTRAN interface:
INTERFACE
    REAL(8) FUNCTION GetLoggingValue [C, ALIAS: '_GetLoggingValue'] (name)
        USE ISO_C_BINDING       
        CHARACTER(LEN=1, KIND=C_CHAR), DIMENSION(*),    INTENT(IN) :: name                  
    END FUNCTION GetLoggingValue
END INTERFACE

! Calling the function:
GetLoggingValue(user_name)

Cuando intento usar una lógica análoga para devolver un char * desde C, me sale un problema tras otro. Un intento que sentí que debería funcionar es:

// The C declaration header (using __cdecl in a def file):
extern "C" const char* GetLastErrorMessage();

Y la interfaz FORTRAN:

INTERFACE
    FUNCTION GetLastErrorMessage [C, ALIAS: '_GetLastErrorMessage'] ()
        USE ISO_C_BINDING   
        CHARACTER(LEN=1, KIND=C_CHAR), DIMENSION(255), :: GetLastErrorMessage
    END FUNCTION GetLastErrorMessage
END INTERFACE

(No puedo usar literalmente la DIMENSIÓN (*), así que he aumentado de tamaño a 255).

Estadeberí devuelve un puntero a una matriz de 255 caracteres de estilo C, pero si lo hace, no he podido convertir esto en una cadena significativa. En la práctica, devuelve un conjunto aleatorio de caracteres, desde Wingdings hasta el carácter de 'campana' ...

También he intentado volver:

Un puntero a CHARACTER (LEN = 255, KIND = C_CHAR). CARÁCTER literal (LEN = 255, KIND = C_CHAR).A INTEGER (C_SIZE_T), e intenté ponerlo en un puntero a una matriz de cadenas.UN PERSONAJE etc.

Si alguien me puede dar un ejemplo de cómo hacer esto, estaría muy agradecido ...

Atentamente

Migue

Respuestas a la pregunta(14)

Su respuesta a la pregunta