gpt4 book ai didi

c - 从 gfortran 将 mxgetfield 添加到 mexinterface

转载 作者:太空宇宙 更新时间:2023-11-03 23:49:36 24 4
gpt4 key购买 nike

我是 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 类型。

关于c - 从 gfortran 将 mxgetfield 添加到 mexinterface,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23780028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com