C++调用matlab生成的.dll动态链接库

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_32570261/article/details/81774815

编译文件:

1、在命令行窗口依次输入以下语句:

mexsetup %选择语言
mbuild -setup

选择编译环境,然后进行编译

mcc -W cpplib:libDataProssing -T link:lib dataProcessing.m 

2、使用matlab 工具箱 Library Compiler
点击工具箱,选择c++SharedLibrary,添加待编译的MATLAB文件,点击Package,完成。
编译完成后,生成的.dll .h .lib就是需要的文件。

C++调用 配置属性

附加包含目录上添加:

C:\Program Files\MATLAB\R2016a\extern\include
C:\Program Files\MATLAB\R2016a\runtime\win64

在链接器->常规->附加库目录添加:

C:\Program Files\MATLAB\R2016a\extern\lib\win64\ microsoft

链接器->输入->附加依赖项:
mclmcrrt.lib
mclmcr.lib
mclbase.lib
mclcommain.lib
libDataProssing.lib

调试经验

  1. 初始化
    if (!libDataProcessingInitialize())  // 一定要进行初始化
        return  -1;
  1. VS为列优先,MATLAB为行优先,注意输入矩阵的顺序;
  2. 如果是控制台应用程序,可以在MATLAB中添加“Disp()”函数,用来显示输入和输出;
  3. 在MATLAB中添加日志,将结果写入.txt文件;
  4. MATLAB2016b与vs2015无法使用debug断点调试,release可以。可能是MATLAB的coder功能会慢慢取代.dll。。。

注意事项:
vs申请内存时,如果是栈,不能太大。特别是MATLAB通过zeros()申请一块较大内存时,MATLAB里面不会报错,但是通过.dll调用时,会导致栈溢出引发中断。

展开阅读全文

没有更多推荐了,返回首页