我是 Fortran 和 C 编程的新手,对 Matlab .m
文件有一些经验。
我正在尝试从我正在为其构建 mexfunction 的 Matlab 调用 Fortran 子例程。因为我似乎必须使用 Matlab 中的 mx_
函数来转换调用 Fortran 子例程之前的数据。
我遇到的问题是,使用 gfortran
编译时,我可用的函数是 bind
-ed in mexinterface
随编译器下载的.我需要使用 mexinterface
中不包含的 mxgetfield
,我尝试将这段代码添加到 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 对我可用?
接口(interface) block 中 mxGetField 的前两个参数需要 VALUE 属性。第一个参数是一个指针,最好用 C_PTR 表示,而不仅仅是一个整数。如果您确实使用整数,那么 C_INTPTR_T 的整数更好。第二个参数可能更好地表示为 C_SIZE_T 类型。
我是一名优秀的程序员,十分优秀!