我正在写一个 iso_c_binding 在Fortran中调用一个具有以下原型的C函数。
int zmat_run(
const size_t inputsize,
unsigned char *inputstr,
size_t *outputsize,
unsigned char **outputbuf,
const int zipid,
int *ret,
const int iscompress
);
我的问题是,我如何声明 unsigned char **outputbuf
在这个接口中,c函数内部用来分配输出缓冲区的指针?
另外,在Fortran中,我应该使用什么数据类型作为实际参数传递给这个函数?outputbuf
它应该是可分配的吗?(如果是在c-function里面分配的话)?
我目前起草了这个模块,但还没有测试过(我怀疑它是否可行)。
module zmatlib
use iso_c_binding, only: c_char, c_size_t, c_ptr, C_NULL_CHAR
interface
integer(c_int) function zmat_run(inputsize, inputbuf, outputsize, outputbuf, zipid, ret, level) bind(C, name="zmat_run")
use iso_c_binding
integer(c_size_t), value :: inputsize
integer(c_int), value :: zipid, level
integer(c_size_t), intent(out) :: outputsize
integer(c_int), intent(out) :: ret
character(kind=c_char), intent(in) :: inputbuf(*)
character pointer(c_ptr),intent(out) :: outputbuf
end function zmat_run
end interface
end module
试用 类型(C_PTR),意图(out). 然后你将需要使用Fortran函数 c_f_pointer 将C指针与Fortran指针关联起来。 可能是类型为 C_CHAR.