参考资料:
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缺始终报错。