matlab和vc6.0混合编程,环境win10,vc6.0, vs2015, matlab 7.0

我这边有个vc6.0的库(暂定为库1)调用了matlab7.0的gridata函数,库1编译通过(现变为库2),没有问题,如下图所示:

img


img


img


之后我使用vs2015做测试时,调用库2,编译也通过了,但是我测试这个函数时,出现初始化不成功,如下图所示:

img


img


环境配置如下图:

img


img


相应的ctf文件也放到exe文件夹下了,如下图所示:

img


img

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了