VS与MATLAB混合编程
与之前写的QT与MATLAB混合编程差不多,就写一下不同的地方
QT与MATLAB混合编程
首先,打开MATLAB生成的打包文件下的for_redistribution_files_only文件夹,将生成的dll、h、lib文件复制到VS工程下
VS调用
1.新建工程后进行配置
选择生成——>配置管理器,在活动解决方案选择×64,设置好关闭即可
在配置属性——>VC++目录
在包含目录中添加:
你的matlab安装目录\extern\include
在库目录中添加:
你的matlab安装目录\extern\lib\win64\microsoft
在设置属性页中——>链接器——>输入——>附加依赖项 在其中添加一下内容
libeng.lib
libmat.lib
libmex.lib
libmx.lib
mclmcrrt.lib
mclmcr.lib
Matlab_Digraph.lib //这个是你MATLAB所写函数生成的.lib名字
四、编译和运行
附上VS中代码(部分)
void DiGraph::DrawDigraph_CP()
{
select[0] = 1;
VectorToArr();
DrawLines();
TransFormat();
c.ImportData_Digraph(in_degree, in_out_weight, MAXVEX, MAXEDGE);
criticalPathArcSize = c.TransferResults_CP(&iCriticalPathS, &iCriticalPathT);
if (!Matlab_DigraphInitialize()) // 初始化,必须要使用
{
qDebug() << "add init failed.";
return;
}
mwArray in_fullLineS(1, MAXEDGE, mxDOUBLE_CLASS, mxREAL);
mwArray in_fullLineT(1, MAXEDGE, mxDOUBLE_CLASS, mxREAL);
mwArray in_jobId(1, taskNum[0], mxDOUBLE_CLASS, mxREAL);
mwArray in_oper(1, taskNum[0], mxDOUBLE_CLASS, mxREAL);
mwArray in_v(1, taskNum[0], mxDOUBLE_CLASS, mxREAL);
mwArray in_dottedLineS(1, MAXEDGE - workPieceNum - taskNum[0], mxDOUBLE_CLASS, mxREAL);
mwArray in_dottedLineT(1, MAXEDGE - workPieceNum - taskNum[0], mxDOUBLE_CLASS, mxREAL);
mwArray in_taskNum(1, 1, mxDOUBLE_CLASS, mxREAL);
mwArray in_iCriticalPathS(1, criticalPathArcSize, mxDOUBLE_CLASS, mxREAL);
mwArray in_iCriticalPathT(1, criticalPathArcSize, mxDOUBLE_CLASS, mxREAL);
mwArray in_select(1, 1, mxDOUBLE_CLASS, mxREAL);
in_fullLineS.SetData(fullLineS, MAXEDGE);
in_fullLineT.SetData(fullLineT, MAXEDGE);
in_jobId.SetData(jobId, taskNum[0]);
in_oper.SetData(oper, taskNum[0]);
in_v.SetData(macDurationTime, taskNum[0]);
in_dottedLineS.SetData(dottedLineS, MAXEDGE - workPieceNum - taskNum[0]);
in_dottedLineT.SetData(dottedLineT, MAXEDGE - workPieceNum - taskNum[0]);
in_taskNum.SetData(taskNum, 1);
in_iCriticalPathS.SetData(iCriticalPathS, criticalPathArcSize);
in_iCriticalPathT.SetData(iCriticalPathT, criticalPathArcSize);
in_select.SetData(select, 1);
Matlab_Digraph(in_fullLineS, in_fullLineT, in_v, in_dottedLineS, in_dottedLineT, in_taskNum, in_jobId, in_oper, in_iCriticalPathS, in_iCriticalPathT, in_select);
}
最终运行结果: