我已经在这里停留了大约一个星期,并且已经在论坛之后搜索了关于如何从C发送char *的清晰解释的论坛FORTRAN。为了使事情更令人沮丧,发送一个char *从FORTRAN到C的说法是直线前进...创建FORTRAN接口到一个返回char *的C函数*
发送一个char *从FORTRAN参数C(这工作正常):
// The C header declaration (using __cdecl in a def file):
extern "C" double GetLoggingValue(char* name);
而且从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)
当试图使用类似的逻辑从C返回一个char *,我遇到问题后的问题。我觉得应该工作的尝试是:
// The C declaration header (using __cdecl in a def file):
extern "C" const char* GetLastErrorMessage();
而且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
(我不能随便使用维度(*),所以我已经过大,以255。 )
This 应该返回一个指向255个C风格字符数组的指针 - 但是如果是这样,我一直无法将其转换为有意义的字符串。在实践中,它返回一个随机的字符集,从任何地方宋体的“钟”字......
我还试图返回:
- 指向字符(LEN = 255, KIND = C_CHAR)。
- 字面字符(LEN = 255,KIND = C_CHAR)。
- A INTEGER(C_SIZE_T),并试图将它转换为指向字符串数组的指针。
- A CHARACTER。
- 等
如果任何人都可以给我如何做到这一点的例子,我将非常感激......
最好的问候,
迈克
你正在使用什么工具链? – 2012-04-02 08:07:26
我使用VC++编译器,但在纯C中编译接口。FORTAN是Visual Fortran 2011,我认为它是FORTRAN 90.但是,这是针对已发布的API,因此它必须可以从可用的许多种类调用... – 2012-04-02 08:19:15