1、由于系统是64位,装的matlab的链接库也是64位,如果使用win32控制台是32位,需要配置管理器-》配置为X64位
2、在c++中调用mwarray类,若未初始化,会出现直接运行没问题,然而调试的时候,出现内存异常,因此需要在调用mwarray前调用初始化函数mclInitializeApplication、及动态链接库的初始化函数。
3、matlab函数最好把函数返回的结果数据转置,因为matlab是根据列存储的,记住只是存储的时候有区别,但在matlab显示行列的时候并没有变,直接用mwarray的getdata()获取数据时,顺序会出错。
4、如果在matlab函数中有形参未被引用,可能会引起奔溃,例如 :
错误形式:
function [ output_args ] = test( input_args )
end
由于该代码中output_args 未被调用 在c++中编译后,会出现函数没有返回参数的错误,最终引起程序崩溃
正确应该为:
function [ output_args ] = test( input_args )
output_args=input_args;
end
5.返回参数问题:返回的参数直接声明对象为mwArray Y;而无需定义矩阵的宽高,但是切记需要被引用
6、在控制台应用程序中,如果matlab中有绘制图片等绘制函数,则程序运行后,不会跳出matlab绘制窗口;然而使用mfc程序调用,可以 跳出matlab的figure等窗口
7、不同的电脑上版本matlab不一致的时候,matlab需要重新生成链接库,否者估计编译完成后,运行的时候出现,找不到某个动态链接库的情况
8、调用前需要初始化模块,调用结束后要关闭matlab模块,共需要调用4句函数假设链接库名为:plotsintest
//调用前
if( ! mclInitializeApplication(NULL,0) )
{
fprintf(stderr, "Could not initialize the application.\n");
exit(1);
}
if (! plotsintestInitialize() )
{
fprintf(stderr,"Could not initialize the library.\n");
exit(1);
}
//matlab数据处理函数
processfunction();
//调用后
//两句要么不要调用,不调用可实现matlab模块与mfc程序窗口共存的功能,要么一起调用,调用将销毁matlab的相关窗口,或数据
plotsintestTerminate();//关闭函数 如果不关闭,matlab的绘制窗口不会被销毁
mclTerminateApplication();//关闭matlab函数
9、建议在mfc程序构造函数中调用mclInitializeApplication、plotsintestInitialize、析构函数中调用plotsintestTerminate、mclTerminateApplication,由于以上两个初始化函数的初始化时间很长,所以建议这么调用在程序启动的时候完成初始化,然后在进行程序中多次调用matlab函数。
10、matlab函数中不允许调用clear()函数,否则c++调用的时候回引起程序崩溃