从Fortran调用C:``void*``返回值

tiw*_*iwo 3 fortran

如何void *function(...)从Fortran 打电话?

我目前正试图从Fortran调用一些C函数.我以前这样做过,但我只调用了自己的功能.例如,要致电:

void add(int *csum, int *ca, int *cb) { *csum = *ca + *cb; }
Run Code Online (Sandbox Code Playgroud)

来自Fortran,我使用过:

INTEGER :: fsum, fa, fb
CALL add(fsum, fa, fb)
Run Code Online (Sandbox Code Playgroud)

这很好用.现在我有几个大致类似的功能:

void *create_obj(void);
void use_obj(void *obj);
void free_obj(void *obj);
Run Code Online (Sandbox Code Playgroud)

甚至:

struct private_struct; /* defined somewhere else */
struct private_struct *create_p(void);
void use_p(struct private_struct *p);
void free_f(struct private_struct *p);
Run Code Online (Sandbox Code Playgroud)

结构是私有的,即我不知道它的成员.

问题:如何将返回值输入Fortran?我并不真的需要访问他们,但我必须上忙的过程中存储create...use...destroy的生命周期.

M. *_* B. 5

您可以在C中创建对象,将指针传递给Fortran,然后将该指针传递给C例程.最后,调用C例程来释放内存.ISO C Binding提供Fortran类型C_PTR.