Matlab与C/C++混合编程接口及应用
[09-12 18:33:18] 来源:http://www.88dzw.com EDA/PLD 阅读:8803次
文章摘要:a.在VC 环境下,新建工程->win32 动态连接库->工程名Test1->empty 工程->完成;b.新建->C++源文件->添加a.cpp,内容为: #include "a.h"_declspec(dllexport) int add(int a, int b) { return a+b; }c.新建->C/C++头文件->添加a.h,内容为: _declspec(dllexport) int add(int a,intb);然后编译生成Test1.dll 动态连接库文件,将Test1.dll 和a.h 拷到Matla
Matlab与C/C++混合编程接口及应用,标签:eda技术,eda技术实用教程,http://www.88dzw.coma.在VC 环境下,新建工程->win32 动态连接库->工程名Test1->empty 工程->完成;
b.新建->C++源文件->添加a.cpp,内容为: #include "a.h"
_declspec(dllexport) int add(int a, int b) { return a+b; }
c.新建->C/C++头文件->添加a.h,内容为: _declspec(dllexport) int add(int a,intb);然后编译生成Test1.dll 动态连接库文件,将Test1.dll 和a.h 拷到Matlab 工作目录下。
d.在Matlab 命令行下,调用Test.dll:>>loadlibrary(‘Test1’,’a.h’); >>x=7;
>>y=8; >>calllib(‘Test1’,‘add’,x,y); Ans=15 >>unloadlibrary(‘Test1’).
调用DLL 动态连接库的方法,为Matlab 重用工程实践中积累的大量实用C/C++代码提供了一种简洁方便的方法。与调用MEX 文件相比,该方法更加简便实用。
3 C/C++调用Matlab
在工程实践中,C/C++调用Matlab 的方法主要有调用Matlab 计算引擎、包含m 文件转 换的C/C++文件,以及调用m 文件生成的DLL 文件。
3.1 利用Matlab 计算引擎
Matlab 的引擎库为用户提供了一些接口函数,利用这些接口函数,用户在自己的程序 中以计算引擎方式调用Matlab 文件。该方法采用客户机/服务器的方式,利用Matlab 引擎 将Matlab 和C/C++联系起来。在实际应用中,C/C++程序为客户机,Matlab 作为本地服务器。
C/C++程序向Matlab 计算引擎传递命令和数据信息,并从Matlab 计算引擎接收数据信息[2]。
Matlab 提供了以下几个C 语言计算引擎访问函数供用户使用[8]:engOpen,engClose, engGetVariable,engPutVariable,engEvalString,engOutputBuffer,engOpenSingleUse, engGetVisible,engSetVisible。
下面以C 语言编写的、调用Matlab 引擎计算方程x3 ?2x+5=0根的源程序example2.c 为 例,说明C/C++调用Matlab 计算引擎编程的原理和步骤:
#include <windows.h> #include <stdlib.h>
#include <stdio.h> #include "engine.h"
int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow)
{ Engine *ep; mxArray *P=NULL,*r=NULL;
char buffer[301]; double poly[4]={1,0,-2,5};
if (!(ep=engOpen(NULL)))
{fprintf(stderr,"\nCan't start MATLAB engine\n"); return EXIT_FAILURE;}
P=mxCreateDoubleMatrix(1,4,mxREAL); mxSetClassName(P,"p");
memcpy((char *)mxGetPr(P),(char *)poly, 4*sizeof(double));
engPutVariable(ep,P); engOutputBuffer(ep,buffer,300);
engEvalString(ep,"disp(['多项式',poly2str(p,'x'),'的根']),r=roots(p)");
MessageBox(NULL,buffer,"example2 展示MATLAB 引擎的应用",MB_OK);
engClose(ep); mxDestroyArray(P); return EXIT_SUCCESS; }
在Matlab 下运行example2.exe: mex -f example2.c。运行结果如图1 所示:
利用计算引擎调用Matlab的特点是:节省大量的系统资源,应用程序整体性能较好,但 不能脱离Matlab的环境运行,且运行速度较慢,但在一些特别的应用[9](例如需要进行三维 图形显示)时可考虑使用。
3.2 利用mcc 编译器生成的cpp 和hpp 文件
Matlab自带的C++Complier--mcc,能将m文件转换为C/C++代码。因此,它为C/C++程序调用m文件提供了另一种便捷的方法。下面举例说明相应步骤:
a.新建example3.m:function y=exmaple3(n) y=0; for i=1:n y=y+i;end
保存后在命令窗口中输入:mcc -t -L Cpp -h example3.
则在工作目录下生成example3.cpp 和example3.hpp 两个文件。
《Matlab与C/C++混合编程接口及应用》相关文章
- › VB调用Matlab在WEDM仿真系统中的应用
- › Matlab与C/C++混合编程接口及应用
- › VC++和Matlab混合编程的语音识别研究
- › 基于Matlab和Simulink仿真环境的CANbus专用工具包
- › Matlab环境下PC与单片机的串行通信及数据处理
- › VB与MATLAB混合编程探讨
- 在百度中搜索相关文章:Matlab与C/C++混合编程接口及应用
- 在谷歌中搜索相关文章:Matlab与C/C++混合编程接口及应用
- 在soso中搜索相关文章:Matlab与C/C++混合编程接口及应用
- 在搜狗中搜索相关文章:Matlab与C/C++混合编程接口及应用