将mxgetfield添加到gfortran的mexinterface中

时间:2014-05-21 10:05:38

标签: c matlab fortran

我是Fortran和C编程的新手,并且在Matlab .m文件方面有一些经验。

我正在尝试从Matlab调用Fortran子例程,我正在构建一个mex函数。因为似乎我必须使用Matlab中的mx_函数来转换调用Fortran子例程之前的数据。

我遇到的问题是使用gfortran编译我可用的函数是bind - 在编译器下载的mexinterface中编辑的。我需要使用mxgetfield中未包含的mexinterface,我尝试将此段代码添加到mexinterface

function mxgetfield(pm,ind,s) bind(c,name = ‘MXGETFIELD’)
  import c_int, c_ptr, c_char
  integer(c_int) :: pm, ind
  character(c_char) s(*)
  type(c_ptr) :: mxgetfield
end function mxgetfield

编译器编译时没有任何问题,但是在使用结构作为输入调用创建的.mexw32时,Matlab会关闭。我的mexfunction中给我带来问题的一行是:

call c_f_pointer(mxgetfield(prhs(1),1,”Field1”), Field1_pr, [9])

有谁能告诉我如何为我提供mxgetfield?

1 个答案:

答案 0 :(得分:1)

接口块中mxGetField的前两个参数需要VALUE属性。第一个参数是一个指针,最好使用C_PTR表示,而不仅仅是一个整数。如果使用整数,则C_INTPTR_T的整数更好。第二个参数可能更好地表示为C_SIZE_T。