VC调用matlab中定义的.m文件中的函数的实例
来源:互联网 发布:杜月笙 知乎 编辑:程序博客网 时间:2024/05/21 14:25
转载地址:http://someday131.blog.sohu.com/70399409.html
VC调用matlab R2006版中定义的.m文件中的函数的实例
此版本与6.0版不大一样,与7.0版的设置类似。(经过测试)
Matlab是一个强大的数学计算/仿真工具,其内置了很多实用的现成的函数,而且我们经常也自己定义很多m函数。但在很多情况下,我们不得不使用VC编程。那么,如何在VC中利用matlab的资源呢?在这里我简要的以一个简单的例子来说明一下如果在VC中调用matlab中定义的.m文件。繁多的理论就不说了,简明扼要的说一个实例。相信大家看过之后都会马上学会的,其中黄色底显示的部分是需要我们手工输入的部分。
步骤如下:
一是先建立 matlab 的 m 文件。
这里为了简单起见,我在matlab中定义了一个函数,其m文件如下:
function y = myadd(a,b)
y=a+b
保存为myfunct.m
二下面来对 matlab 编译环境进行设置。 打开matlab,在命令行状态下键入:mex-setup
然后出现如下提示:
Select a compiler:
[1] Borland C++Builder version 5.0 in C:\Program Files\Borland
[2] Lcc C version 2.4 in F:\SOFT\SHARE\MATLAB65\sys\lcc
[3] Microsoft Visual C/C++ version 6.0 in C:\Program Files\Microsoft Visual Studio
[0] None
Compiler:
这里我们选择’3’。(如果使用其他的编译器比如BCB,那么就可以相应的选择’1’)
然后,继续在命令行状态下输入:
mbuild –setup
Please choose your compiler for building standalone MATLAB applications:
Would you like mbuild to locate installed compilers [y]/n y
Select a compiler:
[1] Borland C++Builder version 5.0 in C:\Program Files\Borland
[2] Lcc C version 2.4 in F:\SOFT\SHARE\MATLAB65\sys\lcc
[3] Microsoft Visual C/C++ version 6.0 in C:\Program Files\Microsoft Visual Studio
[0] None
Compiler:
这里需要几步确认。大家按情况操作即可。以上操作在第一次使用时需进行,以后可省去。
三对 VC 的编译器环境进行设置。 在Tools-options-directory里面设置include和lib的路径,分别添加一项,指向matlab安装目录中的\extern\include和 \extern\lib
四这一步比较关键。在这一步中,将 matlab 中的 .m 文件转换为 dll 。
在matlab命令行中输入:
mcc -B csharedlib:mysharedlib myadd.m
(mysharedlib是生成的lib文件名,可以随意命名。myadd.m是想调用的.m文件名。
至此,可以发现在myadd.m所在的目录生成了一系列文件。我们将要使用:mysharedlib.h,mysharedlib.dll,mysharedlib.lib,mysharedlib.ctf。
五新建一个 VC 工程 。这里取名为 mat 。为了简单,我们在这里建立一个对话框来进行演示。如下:
然后,将上面这四个文件拷贝到VC工程所在的目录中,以便VC调用之,并将.h文件加入到工程中。
六进行 VC 编程。
首先,在cpp文件中加入: #include “mysharedlib.h”
然后,设置VC的链接库。在project-settings-link下的object/library modules中加入:
libmx.lib libmat.lib libeng.lib
设置环境:Project- >Setting- >Link- >Category :Input- >Object/library modules:mclmcr.lib mysharedlib.lib;
至此,VC的编译环境设置完毕。下面就是编程部分了。
七编程部分的关键:接口和数据类型的转换
先给出 VC 实现的源代码:
void CMatDlg::OnButton1()
{ // 在 matlab 中定义的 m 文件 :myadd ,其功能是完成两个数的相加操作。
if( !mclInitializeApplication(NULL,0) )
{
AfxMessageBox(“Could not initialize the application.\n”);
}
if(!mysharedlibInitialize())
{
AfxMessageBox(“Can’t Initalize!”);
}
mxArray *in1,*in2;
mxArray *out1=NULL;
double y1;
double x1=32,x2=24;
in1=mxCreateDoubleMatrix(1,1,mxREAL);
in2=mxCreateDoubleMatrix(1,1,mxREAL);
memcpy(mxGetPr(in1),&x1,sizeof(double));
memcpy(mxGetPr(in2),&x2,sizeof(double));
mlfMyadd(1,&out1,in1,in2);
double *p=mxGetPr(out1);// 将 matlab 中的矩阵的指针传递给 C 语言中的指向 double 的指针
y1=p[0];
CString str;
str.Format(“Y=%f”,y1);
AfxMessageBox(str);
// 释放这些矩阵
mxDestroyArray(in1);in1=0;
mxDestroyArray(in2); in2=0 ;
mxDestroyArray(out1); out1=0;
mysharedlibTerminate();
mclTerminateApplication();
}
- VC调用matlab中定义的.m文件中的函数的实例
- VC调用matlab中定义的.m文件中的函数的实例
- VC调用matlab中定义的.m文件中的函数的实例
- VC调用matlab中定义的.m文件中的函数的实例
- VC调用matlab中定义的.m文件中的函数的实例
- VC调用matlab中定义的.m文件中的函数的方法
- VC调用matlab中定义的.m文件中的函…
- VC++与Matlab混合编程之二:调用Matlab中M函数转换成DLL文件的形式
- MATLAB的M文件调用另一个M文件的函数
- VC与Matlab混合编程(在VC中调用.m文件编译生成的DLL)
- VC++和Matlab混合编程(在VC中调用将.m文件生成的DLL)
- VC++中调用MATLAB *.m函数编译后的动态链接库
- Python 调用Matlab的函数或者调用M文件方法
- [初学笔记] matlab中 函数m文件创立,匿名函数的建立和调用
- Matlab编程与数据类型 -- 函数M文件的调用
- 转:在VS2008中调用Matlab的m文件
- 在VS2008中调用Matlab的m文件
- 在VS2008中调用Matlab的m文件
- Linux 网络编程—— libpcap 详解
- 判欧拉回路或求一个图中欧拉图的个数
- 【日常学习】【最短路Dijkstra】codevs1069 usaco回家 题解
- SVM通俗讲义
- Mac系统终端命令行不执行命令 总出现command not found解决方法
- VC调用matlab中定义的.m文件中的函数的实例
- ScrollView嵌套ListView,GridView,ViewPager,以及这些控件自动滚动到底部问题的解决
- appium robotframework 真机测试体验
- ipa终端打包
- Android动态创建表格 .
- 磁盘空间不足,在线移动Oracle的数据文件
- 使用JXPath访问java对象、集合和XML文件
- JAVA Web 要关闭IE缓存,并且要重新关闭页面,重新加载
- android ListView 几个重要属性