我这边有个vc6.0的库(暂定为库1)调用了matlab7.0的gridata函数,库1编译通过(现变为库2),没有问题,如下图所示:
vs2015没问题 之前我用matlab2015a 就是连不上
改成matlab 2015b 就可以了
最好不要用engine的方法 开关matlab engine很费时间
MATLAB自带的把MATLAB函数发布成dll 调用方便效率高
我印象中后缀带a不好用
我发现根目录下没有.lib文件,可能不是这个问题,但是你应该拷贝lib文件到运行目录试试。
这是我以前整理的 c++调用matlab生成的dll 混编步骤:
C++调用Matlab动态链接库,混编
1、在命令行中输入mex -setup
要选择不同的语言,请从以下选项中选择一种命令:
mex -setup C++
2、在命令行中输入mbuild -setup
mex -setup C++ -client MBUILD
3、生成dll文件
一句命令mcc -W cpplib:add -T link:lib add.m
4.VC++目录-》包含目录: D:\Matlab\R2015b\extern\include
5.VC++目录-》库目录: D:\Matlab\R2015b\extern\lib\win64\microsoft
6.项目属性 - 配置属性 -链接器 - 输入 - 附加依赖项:libmx.lib;libmat.lib;libeng.lib;
7.环境变量 path D:\Matlab\R2015b\bin\win64
8.matlab中写好函数
function [c] = MyAdd(a, b)
c = a + b;
end
9.在matlab命令行中输入:mcc -W cpplib:libMyAdd -T link:lib MyAdd
将其中的.dll .h .cpp .lib文件拷贝到C工程中。
10.在.cpp文件
#pragma comment( lib, "libmx.lib" )
#pragma comment( lib, "libmat.lib" )
#pragma comment( lib, "mclmcrrt.lib" )
#pragma comment(lib, "mclmcr.lib")
#include "libMyAdd.h"
#pragma comment(lib, "libMyAdd.lib")
11.在.cpp文件写 调用
int a = 1;
int b = 1;
//int c = 1;
//mxArray* mxa = mxCreateDoubleMatrix(1, 1, mxREAL);
//memcpy(mxGetPr(mxa), (void*)a, sizeof(a));
//mxArray* mxb = mxCreateDoubleMatrix(1, 1, mxREAL);
//memcpy(mxGetPr(mxb), (void*)b, sizeof(b));
//mxArray* mxc = mxCreateDoubleMatrix(1, 1, mxREAL);
if (!libMyAddInitialize())
{
return ;
}
mwArray mxc(1, 1, mxDOUBLE_CLASS);
mwArray mxa(1, 1, mxDOUBLE_CLASS);
mwArray mxb(1, 1, mxDOUBLE_CLASS);
//mxc(1, 1) = c;
mxa(1, 1) = a;
mxb(1, 1) = b;
MyAdd(1, mxc, mxa, mxb);
double dbc = mxc.Get(1, 1, 1);
int ewrwe = 0;
重要提示:在matlab的bin文件夹下 有个lcdata.xsd 和lcdata.xml不能删除,删除了就调用不了dll了