如何使用 iso_c_binding 声明指针的指针?

问题描述 投票:2回答:1

我正在写一个 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 fortran interop fortran-iso-c-binding
1个回答
1
投票

试用 类型(C_PTR),意图(out). 然后你将需要使用Fortran函数 c_f_pointer 将C指针与Fortran指针关联起来。 可能是类型为 C_CHAR.

© www.soinside.com 2019 - 2024. All rights reserved.