C++调用Matlab DLL应用

最近在搞组里项目,需要用到C++调用Matlab的DLL,在网上查阅了一些资料终于取得一些成果,先总结如下:

首先,对Matlab的m文件进行编译生成C++的DLL与Lib文件。我用到的编译环境为Win7、Matlab2013a、Visual Stdio 2012.

1.设置Matlab的编译器

mex -setup

选着Y

选着1

完成mex编译器的设置

同样需要对mbuild进行配置

mbuid -setup

同样的选项

输入命令deploytool或选择

Matlab Compiler

弹出如下对话框

Type选择C++ Shared Library,点击ok选择添加已经编译好的m文件,点击编译即可

将distrib文件夹下的对应的dll、lib、h文件拷贝到自己的工程目录下。

在对C++工程进行配置的时候,首先要对计算机的环境变量进行配置,将Matlab的bin路径加载到环境变量中

我的电脑为D:\Program Files\MATLAB\R2013a\extern\lib\win64\microsoft;与D:\Program Files\MATLAB\R2013a\bin\win64,添加到用户路径与系统路径

然后对C++工程进行配置,需要包含目录路径与库目录

包含目录为:D:\Program Files\MATLAB\R2013a\extern\include与D:\Program Files\MATLAB\R2013a\extern\include\win64

库目录为:D:\Program Files\MATLAB\R2013a\extern\lib\win32\microsoft与D:\Program Files\MATLAB\R2013a\extern\lib\win64\microsoft

链接器->输入->附加依赖项:test.lib、mclmcrrt.lib、mclmcr.lib、libmx.lib、libmat.lib

完成以上配置即可对Matlab的Dll进行调用

需要注意的时Matlab编译生成的Dll中参数与m文件的参数会有所变化,如果函数有输出参数,那么编译以后该函数的第一个参数为输出参数的个数,后边依次为每个输出参数,然后为输入参数。同时需要注意的是Matlab生成的Dll中的函数只有mwArray一种数据类型,需要将C++中的数据类型转换为该类型。

如C++中有变量 int  a=1;

转换到Matlab中的函数需要定义为 mwArray mw_a(1, 1, mxINT32_CLASS);

因为Matlab只有矩阵类型的变量,所以需要这样定义,1, 1为a的列数与行数,这里需要特别注意,如果传入到Matlab函数的变量内部运算的话一定要保证变量的类型一致否则会出现Error using==> times Integers only can be combined integers……,出现这个错误就是因为不同类型的两个变量做了运算,所以一定要检查好m文件中每个变量的类型是否一致,以及C++中传入都Matlab函数中的变量类型是否与Matlab的函数所需类型一致,否则就会出现错误!

为了处理Maltab函数的异常可以利用try……catch来接受Matlab函数传回的异常

如:

try
{
     myfitline( x,y,m,xrange,t );//该函数为Matlab中定义的函数
}
catch(const mwException &ex)
{
     CString m_str;
     m_str = ex.what();
     MessageBox(m_str);
     return;
}

这样就完成了对Matlab的Dll的调用工作

注意:我的工程为64位的,32位的工程未做测试!

时间: 2024-08-11 09:57:48

C++调用Matlab DLL应用的相关文章

VC调用matlab dll方式混合编程(c风格--例2)<二>

VC与Matlab混合编程之调用动态链接库dll--<二> 1.是先建立 matlab 的 m 文件. ellipsefit.m 其包含:function [Xc,Yc,A,B,Phi,P]=ellipsefit(x,y) 2.MCC命令编译生成得到h.dll.lib等文件 在matlab命令行中输入: mcc -B csharedlib:ellipsefit ellipsefit.m (此方式为c风格函数) (具体命令含义可参考<精通matlab与C/C++混合程序设计>刘维,第

java调用matlab函数接口的两种方案

Java 调用matlab 函数接口 Java调用matlab函数接口有两种方式: l 一种是通过matlab把函数打成jar包: l 一种是把matlab编译成dll后,用C++再封装成java能支持的数据类型的dll. 注意:不论用这两种方式中的哪一种,最终部署时都需要matlab环境(MCR,在matlab安装路径下有). 1. 方式一:matlab直接打jar包 1.1. 利用matlab自带工具打jar包 1.1.1. 建立jar包 在matlab的Commond Window中输入d

.net 调用 Matlab生成dll出现的问题(The type initializer for &#39;MathWorks?.MATLAB.NE?T.Utility.?MWMCR&#39; threw an exception.)

https://cn.mathworks.com/matlabcentral/answers/278399-i-get-an-error-saying-the-type-initializer-for-mathworks-matlab-net-utility-mwmcr-threw-an-except 这篇文章帮忙解决了问题 记录一下备忘: Hi Nug, Ensure that you have the MCR version corresponding to MATLAB 2012b ins

VC与Matlab混合编程之调用动态链接库dll(C++)——&lt;二&gt;

VC与Matlab混合编程之调用动态链接库dll--<二> 1.是先建立 matlab 的 m 文件. ellipsefit.m 其包含:function [Xc,Yc,A,B,Phi,P]=ellipsefit(x,y) 2.MCC命令编译生成得到h.dll.lib等文件 在matlab命令行中输入: mcc -W cpplib:ellipsefit ellipsefit.m -T link:lib (此方式为c++风格函数) (具体命令含义可参考<精通matlab与C/C++混合程序

asp.net下调用Matlab生成动态链接库

对于这次论文项目,最后在写一篇关于工程的博客,那就是在asp.net下调用matlab生成的dll动态链接库.至今关于matlab,c/c++(opencv),c#(asp.net)我总共写了4篇配置的博客,配置问题搞了我们差不多2周多的时间,各种编译不通过,各种链接出问题,各种头疼,甚至都有放弃asp.net下建工程,转用matlab的gui来实现前端界面的念头了.但是在队友的强烈要求下,我不得不硬着头皮搞下这配置问题,最终总结出这4篇配置博客.其中艰辛,恐怕连队友都不甚了解. 当然在实验室同

Windows、Linux、Web安装及调用Matlab程序完整说明(大章)

本文档详细说明了Linux下Web项目调用Matlab函数的完整操作,文章适合对Java.Linux有一定基础了解的人群(不了解也没什么,无非是多试几次).因Linux作为服务器,所以未在其上安装Matlab主程序,只安装了运行环境MCR. 本文档内所述的所有版本软件均以32位为准,JDK与MCR也使用32位.若你的系统为64位,Linux系统同样为64位,则请尽量选择使用64位版本的JDK与MCR. 由于Matlab的版本限制问题,请保证Matlab主程序和MATLABCompiler Run

安装及调用Matlab程序可能存在的问题解决办法

无法执行本地调用Matlab函数JAR包,容易出现的问题 a检查你的环境变量Path: %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; F:\Program Files\MATLAB\MATLAB Compiler Runtime\v717\runtime\win32; F:\Program Files\MATLAB\R2012a\runtime\win32;F:\ProgramFiles\MATLAB\R2012a\bin; 这是2个程序,需要都配置环境变量. b M

C#中调用Matlab人工神经网络算法实现手写数字识别

手写数字识别实现 设计技术参数:通过由数字构成的图像,自动实现几个不同数字的识别,设计识别方法,有较高的识别率 关键字:二值化  投影  矩阵  目标定位  Matlab 手写数字图像识别简介: 手写阿拉伯数字识别是图像内容识别中较为简单的一个应用领域,原因有被识别的模式数较少(只有0到9,10个阿拉伯数字).阿拉伯数字笔画少并且简单等.手写阿拉伯数字的识别采用的方法相对于人脸识别.汉字识别等应用领域来说可以采用更为灵活的方法,例如基于规则的方法.基于有限状态自动机的方法.基于统计的方法和基于神

java调用matlab函数

如何将实验结果在matlab中可视化呢,下面使用java语言编程,调用matlab中的函数: 本人安装的是Matlab7.11.0 (R2010a)和 Eclipse 4.2 : 1)首先设置环境变量,运行tomcat,Eclipse等都需要依靠环境变量JAVA_HOME,Path,classpath,具体的设置可以参考这里 为了使在matlab中将.m函数编译为jar包,还需要在classpath中添加: %matlabInstallRoot%\R2010a\toolbox\javabuild