本人想在win10操作系统下通过VC6.0引用MATLAB生成的dll文件,这个过程遇到了很多的坑,这里总结一下具体的过程。
- MATLAB生成.dll
这个过程主要可以在网上参考一些文章关于“ VC三种方法用C++调用Matlab”。方法没有问题,关键问题出在了C++ sdk的问题上,因为老一些的MATLAB版本只支持sdk7.1,而这个版本的sdk要在win10系统之前的版本,而在win10操作系统下配置sdk7.1就比较麻烦了。在win10操作系统下使用sdk10相对就方便的多,这样我们就要选择支持sdk10的MATLAB版本,通过官网查看可以查看,要选择2017及其更高的版本。选择了正确的版本我们就可以顺利的解决这个问题了。 - VC6.0引用MATLAB的.dll
这里按照网上相关攻略操作就出现新的状况了,无法正常引用。经过反复查找问题,发现还是兼容的问题,VC6.0是32位,然而MATLAB2017b只有64位,所以通过这个版本调用的引擎和库就无法在VC中识别。
最后我将自己写好的程序移到了win7,MATLAB2015bwin32的环境后成功编译,确定了是兼容性的问题。
总结
使用VC6.0的话还是在win7下配置相应的环境比较简单;如果要用win10,那么需要解决以上两个问题,关键是要配置sdk7.1和安装MATLAB win32的版本。
下面给一个连接,关于实现matlab与vc混合编程,写的不错,https://wenku.baidu.com/view/e081894ee518964bcf847c62.html
但是存在一点问题,我最终是用MATLAB2015bwin32实现的,直接套用它出现了一点问题,贴一下我的代码以供参考:
//matlab 求和函数函数
function [c]=Add(a,b)
c=a+b;
end
//VC 中的实现函数
void CTestDlg::OnButton1()
{
if( !mclInitializeApplication(NULL,0) )
{
AfxMessageBox("Could not initialize the application.\n");
}
if(!AddInitialize())
{
AfxMessageBox("Can’t Initalize!");
}
mwArray a(1,1,mxDOUBLE_CLASS,mxREAL);
mwArray b(1,1,mxDOUBLE_CLASS,mxREAL);
mwArray c(1,1,mxDOUBLE_CLASS,mxREAL);
double data1=2;
double data2=3;
a.SetData(&data1,1);
b.SetData(&data2,1);
Add(1,c,b,a);
double result=c.Get(1,1);
CString str2;
str2.Format("Y=%f",result);
AfxMessageBox(str2);
}
如果有更好的方法,欢迎讨论!