本代码是由「Microsoft Visual Studio 2015 Enterprise」编写。
想要了解更多 C++ 与 MATLAB 混合编程的知识,可以参考我的另一篇博客:C++ 与 MATLAB 混合编程总结
代码用到的头文件自己记得添加,包括 string
、vector
等,这里只是主体代码。别忘了最主要的 engine.h
//打开MATLAB引擎
Engine *matlabEngine; //定义MATLAB引擎指针
if (!(matlabEngine = engOpen(NULL))) //测试是否启动Matlab引擎成功
{
cout << "Can't start Matlab engine!" << endl;
exit(1);
}
//读取文件中有效命令到"matlabCode",并发送到MATLAB
ifstream fin;
fin.open("voronoiData.m", ios_base::in);
string matlabCode;
string buf;
string zhuShi = "%"; //** 用于查找是否有注释
string::size_type index;
while (getline(fin, buf))
{
if (buf.empty()) //跳过文件中的空行
{
fin.clear();
buf.erase(); //遇到空行,输入流被阻断,需要重置,以便后续读取
}
else //判断某行是否有注释,如果有,去掉注释内容
{
index = buf.find(zhuShi); //查找该行是否有注释,依据MATLAB注释关键字"%"定位
if (index == string::npos)
{
buf += ";";
matlabCode += buf;
buf.erase();
}
else
{
string temp(buf, 0, index); //去掉注释内容
buf.erase();
temp += ";";
matlabCode += temp;
}
}
}
engEvalString(matlabEngine, matlabCode.c_str()); //命令发送到MATLAB
fin.close(); //关闭文件