win7 vs2013 CPP 调用 MATLAB_R2016b M程序

参考资料:
VS2015调用Matlab编译生成的DLL 编译环境设置 [吐血整理]_weixin_41760829的博客-CSDN博客
https://blog.csdn.net/weixin_41760829/article/details/79389685

matlab将M文件转为cpp的dll、lib、h文件:
matlab运行,命令行中运行deploytool,选library compiler,
选c++ shares library,添加m文件到文件列表中,点击package按钮。

matlab 2016生成的lib、dll是x64版本的,32位版本的需要老版本的matlab。
win7 vs2013创建64位CPP windows 控制台程序,
头文件附加目录E:\MATLAB\R2016b\extern\include
库附加目录E:\MATLAB\R2016b\extern\lib\win64\microsoft
附加库:libmx.lib;libmat.lib;mclmcr.lib;mclmcrrt.lib;
代码如下:

#include <stdio.h>
#include "m/test_add.h"

void m_cpp_dll_example();
int main(int argc, char* argv[])
{
    m_cpp_dll_example();
    system("pause");
	return 0;
}

#pragma  comment(lib, "m/test_add.lib")
void m_cpp_dll_example()
{
    if (!mclmcrInitialize())
    {
        return;
    }
    if (!mclInitializeApplication(NULL, 0))
    {
        return;
    }
    if (!test_addInitialize())
    {
        return;
    }
    //
    mwArray a_ptr(1, 1, mxDOUBLE_CLASS, mxREAL);
    mwArray b_ptr(1, 1, mxDOUBLE_CLASS, mxREAL);
    double data1[] = { 1.0 };
    double data2[] = { 2.0 };
    a_ptr.SetData(data1, 1); //  间接赋值,不能直接赋值
    b_ptr.SetData(data2, 1);
    mwArray c_ptr;
    test_add(1, c_ptr, a_ptr, b_ptr);
    //
    test_addTerminate();
    if (!mclTerminateApplication())
    {
        return;
    }    
    //
    double Val = c_ptr;
    printf("%lf\n", Val);
}

test_add.m文件代码如下

function [c] =test_add(a,b)
c = a+b;
end

问题:
编译正常,vs调试状态可运行。单独运行缺少dll,补充dll缺始终报错。

发布了45 篇原创文章 · 获赞 0 · 访问量 403

猜你喜欢

转载自blog.csdn.net/weixin_43172531/article/details/103983509
今日推荐