在主 MEX 网关函数中准备输出数据

preparing output data in the main MEX gateway function

我正在使用 mex 编写一个包装函数,用于调用 C 函数。通常,我曾经使用

在主网关功能中创建输出矩阵
plhs[0] = mxCreateDoubleMatrix(r,c,mxREAL);

plhs[0] = mxCreateNumericArray(3, dim_array, mxDOUBLE_CLASS, mxREAL);

存储输出图像。现在我有一个 returns 只有长整数值而不是图像的函数。我如何处理这个输出?我需要为单值输出创建矩阵还是有其他功能?

这取决于你所说的 "long integer" 是什么意思。按照下面的 table 来 select 新创建的数组的类型 (mxClassID) 以匹配所需的 MATLAB 和 C 类型。为了作弊,您可以使用 mxClassIDFromClassName 从 MATLAB 类型中获取 class id(例如 mxClassIDFromClassName('single') 到 select mxSINGLE_CLASS

如果您的意思是要创建一个标量,只需创建一个大小为 mxCreateNumericMatrix:

的 1×1 数组
mxCreateNumericMatrix(1, 1, mxClassIDFromClassName('int32'), mxREAL)

另请注意,有一个方便的函数可用于创建 double 标量,mxCreateDoubleScalar:

mxArray *ps = mxCreateDoubleScalar(initialValue);

所有 mxCreate* 函数都列在 MathWorks 参考页上 Create or Delete Array