将mxgetfield从gfortran添加到mexinterface
我不熟悉Fortran和C语言编程,对Matlab将mxgetfield从gfortran添加到mexinterface,c,matlab,fortran,C,Matlab,Fortran,我不熟悉Fortran和C语言编程,对Matlab.m文件有一定的经验 我试图从Matlab调用Fortran子程序,我正在为其构建一个MEX函数。在这方面,我似乎必须使用Matlab中的mx\ux函数来转换调用Fortran子程序之前的数据 我的问题是使用gfortran编译我可用的函数是随编译器下载的mexinterface中的bind-ed函数。我需要使用mxgetfield,它不包括在mexinterface中,我尝试将这段代码添加到mexinterface: function mxge
.m
文件有一定的经验
我试图从Matlab调用Fortran子程序,我正在为其构建一个MEX函数。在这方面,我似乎必须使用Matlab中的mx\ux
函数来转换调用Fortran子程序之前的数据
我的问题是使用gfortran
编译我可用的函数是随编译器下载的mexinterface
中的bind
-ed函数。我需要使用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对我可用吗?接口块中mxgetfield的前两个参数需要VALUE属性。第一个参数是指针,最好用C_PTR表示,而不仅仅是一个整数。如果使用整数,那么C_INTPTR_T的整数更好。第二个参数可能更好地表示为C_SIZE_T类型。谢谢@IanH这样做并简化了代码,在我的网关中得到了类似的东西:“子程序mexfunction(nlhs,plhs,nrhs,prhs)”使用mysubrout_mod implicit none integer::nlhs,nrhs,plhs(nlhs),prhs(nrhs)双精度,指针::out\ptr,inp_ptr调用c_f_指针(mxgetfield(prhs(1),1,'field1'),inp_ptr[1])plhs(1)=mxcreatedoublematrix(1,1,0)调用c_f_指针(mxgetpr(plhs(1)),out_ptr[1])调用mexprintf('Fortran指针创建'//char 0')调用mysubrout(inp_ptr,out_ptr)end子例程mexfunction'在'mysubrout_mod中我正在使用mexinterface,但它仍然不起作用。。。