我是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?
答案 0 :(得分:1)
接口块中mxGetField的前两个参数需要VALUE属性。第一个参数是一个指针,最好使用C_PTR表示,而不仅仅是一个整数。如果使用整数,则C_INTPTR_T的整数更好。第二个参数可能更好地表示为C_SIZE_T。