-
2019-06-19 13:32:25
我在网上找了很多资料,都没有人仔细的说明初始化失败后该怎么解决。
我的VS版本是2013,MATLAB版本是2017。
比如说我需要调用的dll文件是:MAR.dll。
很多人都知道要把MAR.dll、MAR.h、MAR.lib放到自己的工程目录下的相应位置。
还有一个必不可少的文件是MAR.ctf,把它放在MAR.dll的同级目录下就可以了。
更多相关内容 -
VS调用matlab生成的dll(整理教程) .docx
2020-07-18 12:39:26matlab的函数制作dll的步骤,C++调用dll的demo程序,mwArray的应用案例,以及VS调用matlab的dll环境配置过程。 -
VS调用Matlab的函数.docx
2019-07-19 17:21:02将Matlab的.m文件生成动态链接库,然后在VS的工程项目中调用动态链接库。可以完美实现VC调用Matlab函数。 -
VS调用MATLAB缺少dll文件问题
2014-04-15 17:42:22解决VS2008调用MATLAB时提示缺少DLL文件而不能启动程序问题,主要包括的DLL文件有:comcli.dll,DataSvcs.dll,icudt24l.dll,icuin24.dll,icuio24.dll,libmwhardcopy.dll,libmwservices.dll,libmx.dll,libut.... -
MATLAB和VS联合编程,VS调用MATLAB
2016-05-12 08:57:53VS2010调用MATLAB2012的动态链接库,测试通过,有操作步骤和测试代码 -
vs调用Matlab
2013-03-11 19:22:18vs调用Matlab -
vs2015_matlab_从vs2015中调用matlab函数_c++调用matlab_againstvbb_
2021-10-03 14:11:55从vs2015中调用matlab中自定义的函数。c++和matlab的混合编程简单实例 -
matlab调用VS2015生成的.dll工程
2018-06-22 22:24:49matlab调用VS2015生成的.dll工程;里面包含了VS2015的工程文件,以及matlab脚本文件 -
VS2015调用Matlab2015的动态链接库
2020-09-12 10:51:25VS2015调用Matlab2015b生成32位动态链接库,包括说明文档及VS2015工程和Matlab源码示例。 -
VS调用matlab
2015-07-01 22:00:24可参照: VS2010调用Matlab的m文件所生产的dll实现二次规划算法.docx 全文-毕业论文-文档在线 http://max.book118.com/html/2013/1231/5422885.shtm VS调用matlab_HuoChengfu_新浪博客 ...可参照:
VS2010调用Matlab的m文件所生产的dll实现二次规划算法.docx 全文-毕业论文-文档在线
http://max.book118.com/html/2013/1231/5422885.shtm
VS调用matlab_HuoChengfu_新浪博客
http://blog.sina.com.cn/s/blog_4d1865f00100r4ad.html
VS调用matlab的一些设置
MyFunction.m :
function MyFunction(x,y)
z = extra1(y); figure(1)
plot(x,z);
grid
print(1,'-dpng','D:\abc.png');//保存图片
end
extra1.m :
function z=extra1(y)
for i=1:20
z(i) = y(i);
end for i=21:30
z(i)=3*y(i);
end
说明:Matlab里MyFunction(x,y)调用z=extra1(y)
希望在C++中调用MyFunction(x,y) 1、配置环境,见前面博客文章
2、Matlab:mcc -C -W cpplib:filename -T link:lib MyFunction.m
注:filename可任意取名
只需编译MyFunction.m即可,编译器会自动寻找其调用的函数,不需管extra1.m
3、“2”会生成filename.h(.lib .dll .ctf),只需要这4个,.cpp和其它用不着
4、将上述四个文件copy到VC工程中
5、project添加filename.lib,解决方案中添加filename.h
6、C函数:filenameInitialize();//必须(filename与前面一致)
int Num = 30;
mwArray x(1,Num,mxDOUBLE_CLASS);
mwArray y(1, Num, mxDOUBLE_CLASS);
for(int i = 1; i <= Num; i++)
{
x(1, i) = i;
y(1, i) = 2 * i;
}
MyFunction(x, y);//调用函数,参数x,y必须为矩阵mwArray格式,其余不接收
filenameTerminate();//非必须,可写在析构函数,这样matlab图不会立即消失 ----------------------------------------------------------------------------------------------
注:filename.m与function funcname(),最好filename = funcname
1、Matlab生成dll,lib等(可被C++调用)
mcc -C -W cpplib:filename -T link:lib function.m2、VC++调用Matlab生成的dll见
“VS2008调用Matlab2010生成的dll流程.txt” 3、Matlab生成exe
mcc -m filename 4、VC++调用exe:
#include <shellapi.h>
system("D:\\filename.exe"); //路径及exe名字可改
如何在exe中使参数可调? 待续。。。
-
VS调用Matlab计算引擎
2016-04-27 13:22:41C++&Matlab混合编程C++调用Matlab(混合编程)
实验环境:
VS2015+Matlab2015b+Windows10(本实验在多个平台上均通过验证)也可以用cmake编译调用Matlab,核心就是让C++编译器找到Matlab的engine以及对应的库和Dll步骤:
1. 新建工程
2. 配置属性
这里一共要改三个地方:1. 配置属性->VC++目录->包含目录编辑为:Matlab安装路径下 ...\extern\include;< -
VS通过调用matlab引擎方式在VS里调用matlab函数和自己写的.m文件
2019-07-18 22:09:18VS通过调用matlab引擎方式在VS里调用matlab函数和自己写的.m文件 1.matlab编译成.dll给VS调用 2. VS通过调用matlab引擎的方式 2.1调用matlab自带函数 2.2 碰到的问题 2.3 调自己写的matlab函数 首先说vs和matlab...VS通过调用matlab引擎方式在VS里调用matlab函数和自己写的.m文件
首先说vs和matlab混合编程网上有三种方法,分别是:1.matlab编译成.dll给VS调用
这个可以脱离matlab,只需要把相关的文件拷入VS工程目录下,具体流程在下面粘贴几个链接,感觉写的挺好的。
1.matlab函数编译成库供C++调用(非常详细)
2.C/C++程序通过动态链接库调用MATLAB程序但是好像不是所有的matlab程序都适用于这种方式,啊好烦啊 (≧﹏ ≦),最最最坑的是,在matlab里涉及到符号变量 syms ,编译完的.dl文件在vs里跑会提示无法识别的符号或函数,然后指向matlab文件用 syms 定义符号变量的那一行(这倒是很智能),现在也没有找到解决办法,网上有说是:编译成 .dll不能用 syms sym 这些,还有什么替换啥的,感觉太麻烦没有试,试下面那个脱离不了matlab的有点笨笨的方法吧, ( ̄_ ̄|||)
2. VS通过调用matlab引擎的方式
参考了下面几个链接,在这里留下:
1.在VS2008中调用Matlab的m文件(百度文库)
2.和上面一样(CSDN)就是说,引擎的方式提供的matlab功能是最全面的,比如说上面那个"臭syms",用引擎的方式后来可以用。通过引擎的方式实际上是在程序中打开一个matlab进程,让matlab软件自己去运行自己的.m文件里的程序,这个当matlab文件需要修改的时候也比.dll方便,直接修改.m文件就行。在控制台还能看到matlab图标,是将matlab通过ActiveX 控件方式启动的。
环境 :: 这个值得一说,就是VS和matlab的版本和位数,我用了两个分别是
【VS2013(x64编译)+MATLAB2014a(64位)】 【VS2013(win32编译)+MATLAB2015b(32位)】
版本的话个人感觉MATLAB比VS高应该就差不多,或者matlab官网查一下支持。
VS2013一直是那个2013,好像它是32位的,然后在编译的时候可以选择编译活动平台是win32 还是x64,然后分别对应32位和64位的matlab,所以就是因为本来我的VS程序有些dll库是32位编译的,所以它编译的时候只能选择win32编译,不能选择x64,而想调用64位的matlab引擎编译方式必须选择x64编译,所以电脑上本来安装的64位版本matlab2014a不行,当时是新建一个控制台应用程序选择x64编译试了下可以调用引擎,然后再安装了32位的matlab(MATLAB2015是最后一个支持32位的matlab版本了)
下面说说流程:(用后一个环境吧,可以边做边记录,前一个已经好了)
-
安装了VS2013和matlab2015b(32位)(超级推荐软件安装管家公众号,这个神仙公众号!!!)
-
配置编译器(包含引擎头文件engine.h并引入Matlab对应的库文件libmx.lib、libmat.lib、libeng.lib)
- VS里新建一个控制台应用程序
- 右键项目-属性-VC++目录-包含目录 :D:\MATLAB2015\R2015b\extern\include
- 右键项目-属性-VC++目录-库目录 :D:\MATLAB2015\R2015b\extern\lib\win32\microsoft
- 右键项目-属性-连接器-输入:在附加依赖项编辑框中,添加文件名libmx.lib libmat.lib libeng.lib
#include "enging.h"
该文件包含了引擎API函数的说明和所需数据结构的定义。- 测试程序:
2.1调用matlab自带函数
#include "stdafx.h" #include <iostream> #include "math.h" #include "engine.h" #pragma comment(lib,"libmx.lib") #pragma comment(lib,"libmat.lib") #pragma comment(lib,"libeng.lib") int _tmain(int argc, _TCHAR* argv[]) { const int N = 50; double x[N], y[N]; int j = 1; for ( int i = 0; i < N; i++) { x[i] = i + 1; y[i] = sin(x[i] + j*log(x[i])); j *= -1; } Engine *ep; //定义matlab引擎指针 if (!(ep = engOpen(NULL))) //打开引擎 测试是否启动引擎成功 { std::cout << "Can't start Matlab enfine!" << std::endl; //exit(1); } //定义mxArray类型的1行N列的实数数组 mxArray *xx = mxCreateDoubleMatrix(1, N, mxREAL); mxArray *yy = mxCreateDoubleMatrix(1, N, mxREAL); //将数组x复制到mxArray数组xx中,将数组y复制到mxArray数组yy中 memcpy(mxGetPr(xx), x, N*sizeof(double)); memcpy(mxGetPr(yy), y, N*sizeof(double)); //将mxArray数组xx写入matlab工作空间,命名为xx //将mxArray数组yy写入matlab工作空间,命名为yy engPutVariable(ep, "xx", xx); engPutVariable(ep, "yy", yy); //engEvalString(ep, "plot(xx,yy);"); //像matlab发送画图命令 //engEvalString(ep, "benchmarkRRT()"); engEvalString(ep, "Control1()"); mxDestroyArray(xx); mxDestroyArray(yy); std::cout << "press any key to exit" << std::endl; std::cin.get(); engClose(ep); //关闭引擎 return 0; }
2.2 碰到的问题
虽然上面的步骤完成了,但是在程序运行的时候会碰到一些问题,
-
引擎打开不成功,每次运行一闪而过,加断点发现每次都是引擎打不开直接退出了,这个是在 第一个环境下(VS2013(win32编译)+MATLAB2014a(64位) 出现的问题(解决了,没留下图…),可能是我那个matlab重装系统之后没有注册,按网上的方法VS与MATLAB混合编程出现打不开引擎的问题把matlab注册一下就好了。
方法:先用管理员身份打开cmd,输入指令 cd/d D:\MATLAB\R2014a\bin 到matlab文件夹下面,再输入指令 matlab /regserver (这里千万注意指令中间有个空格空格空格,额,,,没有输入空格只是运行出了matlab而已)会弹出那个框。然后在程序里就能运行过打开引擎那一步了。
-
如果安装了两个matlab软件,调用引擎的时候,默认打开的是最新注册的版本的matlab软件,这个为啥,还不知道。。。
-
提示缺失一些.dll文件,这些文件是在 D:\MATLAB2015\R2015b\bin\win32 文件夹下面的,当然可以挨个找到然后都复制到工程的 Debug 文件下,但是不止图片上的一个哦,需要超级超级多的 .dll,一个一个找或者把那里的全部.dll都粘贴过来也太尴尬了吧,强迫症会受不了的,别想了,没门没门~
需要理解一下项目寻找dll文件的流程,主要就是会在当前文件夹下搜,然后在系统的环境变量文件里搜,所以需要把那个文件夹路径添加到系统的环境变量里面,这样得劲儿多了(Debug里不会那么乱)~~,值得注意的是:改完直接运行还是会提醒找不到,关闭解决方案再打开还是一样,把VS软件关了,再打开就好了,不容易额。
也就是这个链接说的这样 : VS2008调用matlab引擎找不到dll问题
然后对于利用引擎调用matlab自带函数实现matlab函数功能就实现了,就是下图,那么怎么实现自己写的函数呢?
2.3 调自己写的matlab函数
下面是对于自己用matlab写的函数。我自己瞎想的烂七八糟的,能用,就是太 LOW 了,目前先这么凑活着吧。
观察一下,matlab里的polt函数有个.m文件,是在 D:\MATLAB2015\R2015b\toolbox文件夹里面,所以呢步骤:- 在上述路径toolbox文件夹里里添加自己写的函数的m文件(mycontrol文件夹)
- matlab软件主页>设置路径>添加文件夹>写有自己matlab函数的文件夹,保存后重启matlab
//engEvalString(ep, "plot(xx,yy);"); //像matlab发送画图命令 engEvalString(ep, "benchmarkRRT()"); engEvalString(ep, "Control1()");
下面一个链接备用:
- 例0:小试牛刀,在C++中调用MATLAB绘图
- 例1:使用engPutVariable函数向MATLAB引擎发送数据
- 例2:使用engGetVariable函数从MATLAB引擎中获取数据:
- 例3:向MATLAB引擎传入数据,然后从MATLAB引擎中获取3数据的计算结果:
-
-
LabVIEW调用MATLAB进行图像处理的实现,labview调用matlab函数,LabView
2021-09-10 15:25:54LabVIEW调用MATLAB进行图像处理 -
C++ MATLAB 混合编程——VS项目调用MATLAB函数
2018-06-28 10:17:36这里就总结一下如何在VS工程中调用MATLAB函数,以及遇到的问题如何解决的方法。 VS配置 这一步很重要,类似于其他C++库的配置,如:添加包含目录和库路径。 添加库目录(自己的MATLAB安装路径中查找):D:\... -
qt调用matlab动态链接库
2022-04-22 23:13:29qt调用matlab动态链接库 -
windows系统下C++调用matlab程序的方法详解
2021-01-20 06:09:25之前已经跟大家介绍了在ubuntu系统下C++调用matlab程序的方法,需要的朋友们可以参考这篇文章,本文将给大家介绍关于windows下C++调用matlab程序的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看... -
C/C++ VS中调用matlab函数的方法
2017-07-01 16:20:01C/C++ VS中调用matlab函数的方法 Matlab在数值等矩阵运算中具有很大优势,并且Matlab提供了强大的工具箱可以使用,在C/C++开发中,我们可以在VS下调用matlab函数进行混合编程。下面主要介绍VS中调用matlab函数的环境... -
matlab调用fortran_matlab调用forturn_matlab调用fortran_Fortran_matlab调用
2021-09-10 20:35:33FORTRAN程序调用MATLAB引擎实现计算可视化介绍 -
VS2010调用MATLAB.zip
2019-06-27 16:55:55Visual Studio 2010调用MATLAB算法混合编程,包括Visual Studio 2010示例工程、MATLAB示例代码以及文档说明。 MATLAB2017a -
VS与Matlab混合编程——调用matlab.dll实现
2018-08-08 16:29:45本人使用的VS2010和Matlab2014a 1.在Matlab中写一个简单的加法函数,例如 function c = add(a,b) c = a + b; end 保存为add.m文件。 在命令窗口输入 mex -setup命令,... -
1.VS2017调用Matlab函数
2020-08-13 12:33:33VS2017调用Matlab函数环境配置 环境配置 1.在vs中新建项目-》右键-》属性,在包含目录添加如下内容(自己的Matlab安装路径) : -
Matlab调用REFPROP完全说明,matlab调用refprop函数,matlab
2021-09-10 20:49:40MATLAB调用refprop,里面包含四个除dll外所需要的文件 -
labview调用matlab函数.docx
2020-05-11 12:19:04详细介绍labview调用matlab函数的方法,以及过程中的注意事项。 详细介绍labview调用matlab函数的方法,以及过程中的注意事项。 -
vs与matlab混合编程之dll调用步骤
2016-09-20 10:17:01vs与matlab混合编程之dll调用步骤 -
python调用matlab的m自定义函数方法
2020-12-31 12:12:03项目信号处理和提取部分用到了matlab,需要应用到工程中方便研究。用具有万能粘合剂之称的“Python”。具体方法如下: 1.python中安装mlab 下载https://pypi.python.org/pypi/mlab 安装命令:python setup.py ... -
C# 调用MATLAB程序绘图
2019-04-23 11:42:39C#调用MATLAB程序绘图,压缩文件包含.m文件,仅供参考 -
VS调用matlab(win7环境
2011-11-12 13:45:41win7环境下,VS 2010调用matlab2010方法。先将m文件编译成动态库再使用VC调用,不是mex函数的方法,更加灵活。 -
VS2017调用Matlab2016b进行绘图
2018-06-25 00:19:121、运行环境 Windows 10 64bit Visual Studio Community 2017 Matlab 2016b 注:也适用于Matlab 2017a 2、matlab安装补丁 打开...打开对应的matlab版本“Support... -
python调用matlab生成的动态库-附件资源
2021-03-02 15:06:05python调用matlab生成的动态库-附件资源