看了好多文章,在网上找了好多资料,终于在自己电脑上实现了用VS2013调用Matlab编译的动态库;
我的机器环境是(64位) Windows10 Matlab2015a Visual Studio 2013;由于没有找到破解版的Matlab来支持VS2015的编译器和打包工具,就用的VS2013。
需要注意的问题是64位的机器需要配置64位的工程配置,Matlab配置的mex编译器和mbuild打包工具需要选择一致,我选择的是VS2013,用师姐给的Matlab2014a的库调用就缺少某些.dll文件,这个应该是版本问题
总共分为以下几步:
1.设置系统环境变量
C:\R2015a\bin\win64;
C:\R2015a\bin;
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin;(VS安装路径)
2.VC++目录下的包含目录添加
C:\R2015a\extern\include
C:\R2015a\extern\include\win64
D:\Documents\VS2013\test\test
估计是BUG,在VS中添加目录如果路径中某个文件夹名字包含空格可能会导致VS无法识别路径,所以我把我的Matlab包和工程文件夹都拷贝到没有空格的文件夹里面了。。。也以防万一3.VC++目录下的库目录添加
C:\R2015a\bin\win64
C:\R2015a\extern\lib
D:\Documents\VS2013\test\test
C:\R2015a\extern\lib\win64\microsoft
C:\R2015a\extern\lib\win32\microsoft
4.C/C++中的常规里面的附加包含目录添加
C:\R2015a\extern\include
5.连接器下面的常规中的附加库目录添加
C:\R2015a\extern\lib\win64\microsoft
6.连接器下面的输入中的附加依赖项添加
libeng.lib
libmat.lib
libmex.lib
libmx.lib
mclmcrrt.lib
mclmcr.lib
libMyAdd.lib
7.在将Matlab编译好的.dll .lib .h文件拷贝到工程目录里面和主函数所在文件夹放在一起,并添加至工程8.在配置管理器中将工程配置为x64(这一步容易被忽略)
下面来看看主函数怎么调用加法函数,源代码样例:
// test.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "engine.h"
#include "mclmcr.h"
#include "mclcppclass.h"
#include "libMyAdd.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
if (!libSumInitialize())
{
//initilize failed!!!"<<std::endl;
std::cout << "错误..." << std::endl;
return -1;
}
double a = 6;
double b = 9;
double c;
mwArray mwA(1, 1, mxDOUBLE_CLASS);
mwArray mwB(1, 1, mxDOUBLE_CLASS);
mwArray mwC(1, 1, mxDOUBLE_CLASS);
mwA.SetData(&a, 1);
mwB.SetData(&b, 1);
MyAdd(1, mwC, mwA, mwB);
c = mwC.Get(1, 1);
cout << c << endl;
system("PAUSE");
return 0;
}