Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将mxgetfield从gfortran添加到mexinterface_C_Matlab_Fortran - Fatal编程技术网

将mxgetfield从gfortran添加到mexinterface

将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

我不熟悉Fortran和C语言编程,对Matlab
.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,但它仍然不起作用。。。