VS与Matlab混合编程——调用matlab.dll实现

本人使用的VS2010(32位)和Matlab2014a(64位)
1.在Matlab中写一个简单的加法函数,例如

function c = add(a,b)
          c = a + b;
 end

保存为add.m文件。
在命令窗口输入 mex -setup命令,选择 “mex -setupC++”
这里写图片描述
这里写图片描述
继续输入mbuild -setup,然后选择“mex -setup C++ -client MBUILD”
这里写图片描述
这里写图片描述
继续输入deploytool,然后选择library compiler
这里写图片描述
然后等待运行成功即可
这里写图片描述
生成3个文件
这里写图片描述
选择“for_redistribution_files_only”这个文件夹中的“add.dll”“add.h”“add.lib”的这三个文件
这里写图片描述
2.在MFC下新建一个控制台应用程序。
1>新建工程后进行配置。
选择生成->配置管理器,在活动解决方案选择×64,设置好关闭即可
这里写图片描述
2>选择项目名称右击选择属性
这里写图片描述
a.在属性页面,左侧选择VC++目录将包含目录修改为自己matlab中“MATLAB\R2014a\extern\include”和“MATLAB\R2014a\extern\include\win64”所在路径
“D:\Program Files\MATLAB\R2014a\extern\include”
“D:\Program Files\MATLAB\R2014a\extern\include\win64”(这是我自己的路径)
这里写图片描述
库目录修改为自己matlab中“MATLAB\R2014a\extern\lib\win64\microsoft”所在路径
“D:\Program Files\MATLAB\R2014a\extern\lib\win64\microsoft”
这里写图片描述
b.然后选择链接器->输入->修改附加依赖项
这里写图片描述
“libeng.lib
libmat.lib
libmex.lib
libmx.lib
mclmcrrt.lib
mclmcr.lib
add.lib”(最后一个是自己的文件)
将这几项添加至附加依赖项中
(图中没有显示全部,要把那些全部写进去)
这里写图片描述
然后点击确定即配置完成。
3>将“add.dll”“add.h”“add.lib”这3个文件拷贝至自己建立的控制台程序中,并将“add.h”文件添加至项目中
这里写图片描述
3.在vs中实现调用matlab.dll代码如下

#include "stdafx.h"

#include "engine.h"

#include "mclmcr.h"

#include "mclcppclass.h"

#include "add.h"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

    if(!addInitialize())

    {

        std::cout<<"错误..."<<std::endl;

        return -1;

    }

    double a = 6;

    double b = 9;

    double c;

    mwArray mwA(1, 1, mxDOUBLE_CLASS);
    //mwArray将此变量转换为1×1的矩阵
    mwArray mwB(1, 1, mxDOUBLE_CLASS);

    mwArray mwC(1, 1, mxDOUBLE_CLASS);

    mwA.SetData(&a, 1);
    //SetData第二个参数为设置的数的个数,大小可设为rows*cols
    mwB.SetData(&b, 1);

    add(1, mwC, mwA, mwB);

    c = mwC.Get(1,1);

    cout<<c<<endl;

    system("PAUSE");

    return 0;

}

运行该程序便可实现vs与matlab混合编程。
运行结果如下图所示:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_29503183/article/details/81299417