与mwArray集成c++共享库
c++共享库包装器
创建c++共享库时使用MATLAB®编译器SDK™,编译器生成一个包装器文件和一个头文件。头文件包含编译后的MATLAB函数的所有入口点。
c++libmatrix
例子
本页上的示例引用了c++共享库libmatrix
.要创建这个库,请完成示例生成一个c++ mwArray API共享库并构建一个c++应用程序.
确保两个文件都在当前文件夹中,然后编译matrix_mwarray.cpp
应用程序使用mbuild
.
mbuildmatrix_mwarray.cpplibmatrix.lib
请注意
由于c++中的名称混乱,您必须使用与用于编译c++共享库相同版本的第三方编译器来编译c++应用程序。
c++应用程序中的数组
在matrix_mwarray.cpp
代码中,数组由类的对象表示mwArray
.每一个mwArray
类对象包含指向MATLAB数组结构的指针。因此,属性的属性mwArray
对象是MATLAB数组属性的超集。每个MATLAB数组都包含关于数组的大小和形状(即行、列和页的数量)以及一个或两个数据数组的信息。第一个数组存储数组数据的实部,第二个数组存储虚部。对于没有虚部的数组,不存在第二个数组。数组中的数据按列大序排列,而不是行大序排列。
谨慎
避免发行cd
从c++应用程序的命令调用mclInitializeApplication
.如果不这样做,可能会导致失败MATLAB运行时初始化。
有关如何MATLAB编译器SDK为链接库使用代理层,请参见理解mclmcrrt代理层.
将c++共享库合并到应用程序中
在使用c++共享库时,有两个主要的区别需要注意:
接口函数使用
mwArray
类型来传递参数,而不是mxArray
用于C共享库的类型。c++异常用于向调用者报告错误。因此,所有调用都必须封装在
try - catch
块。
导出功能签名
c++共享库目标为每个MATLAB函数生成两组接口。有关更多信息,请参见从MATLAB文件生成的函数.导出的c++函数的通用签名如下:
MATLAB没有返回值的函数
bool MW_CALL_CONV <函数名const_mwArray_references>);
MATLAB至少有一个返回值的函数
bool MW_CALL_CONV <函数名>(intmwArray_references>, <const_mwArray_references>);
在这种情况下,const_mwArray_references
表示类型引用的逗号分隔列表const mwArray&
而且mwArray_references
表示类型引用的逗号分隔列表mwArray&
.例如,在libmatrix
的c++接口addmatrix
MATLAB函数生成为:
void addmatrix(int nargout, mwArray& a, const mwArray& a1, const mwArray& a2);
在哪里一个
输出参数和a1
而且a2
是输入参数。
输入参数传递给MATLAB函数通过变长度输入宗量
一定要通过单人间传递mwArray
这是一个单元格数组。单元格数组中的每个元素都必须构成一个输入参数。输出参数检索从MATLAB函数通过varargout
必须通过单一检索mwArray
这是一个单元格数组。单元格数组中的每个元素都将构成一个输出参数。单元格数组中的元素数将等于number_of_return_values
-已命名输出参数的个数。还要注意,
如果MATLAB函数取a
变长度输入宗量
参数时,c++函数必须传入mwArray
与此相对应变长度输入宗量
,即使mwArray
是空的。如果MATLAB函数取a
varargout
参数时,c++函数必须传入mwArray
与此相对应变长度输入宗量
即使number_of_return_values
设置为已命名输出参数的数量,这意味着varargout
将是空的。的
varargout
参数需要在任何命名的输出参数之后和任何输入参数之前。的
变长度输入宗量
参数必须是最后一个参数。
错误处理
c++接口函数通过抛出c++异常来处理执行过程中的错误。使用mwException
类用于此目的。您的应用程序可以捕获mwExceptions
和查询(什么)
方法获取错误消息。要正确处理调用c++接口函数时的错误,请将每个调用包装在try - catch
块。
试试{…(调用函数)…} catch (const mwException& e){…(处理错误)…}
的matrix_mwarray.cpp
application演示了调用c++接口函数时处理错误的典型方法。
使用c++共享库和稀疏数组
的MATLAB编译器SDKC/ c++ API包括用于处理稀疏数组的静态工厂方法。
有关方法的完整列表,请参见c++实用程序类.