Matlab 混合编程资源1

               

发信人: roy (中国大兵), 信区: Matlab

  : VC++ 中编译 MEX 程序(zz)

发信站: 红果园 (2003103011:58:08 星期四), 站内信件

 

VC++ 中编译 MEX 程序

1. 目的

  一般情况下,我们都是在MATLAB命令行或DOS命令行下编译MEX程序。 所用的命令就是

mex filename.c 这有很多不方便的地方:

  a. 虽然mex也可以编译C++mex程序,但是它的主框架仍是C a. 当程序有多个模块

时,需要多次使用mex命令,操作很麻烦

  b. 不能利用VC特有的ClassWizard自动创建和维护类

  c. 不能用MFC类库编写应用程序

  d. 不能方便地进行类似VC的项目管理

这样一个命令行的编程环境可能会大大束缚你的想象力... 其实解决问题的方法很简单

,下面以VC6环境为例详细解说如何在IDE中编译MEX程序。

2. 步骤

(1)准备工作 (这里假设MATLAB的路径为:C:/MATLAB)

a. matlab.def创建库文件matlab.lib

进入c:/matlab/extern/include目录,用lib命令生成matlib.lib

  C:/>cd /matlab/extern/include

  C:/MATLAB/extern/include>lib /def:matlab.def /out:matlab.lib

  Microsoft (R) Library Manager Version 6.00.8447

  Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

  LIB : warning LNK4068: /MACHINE not specified; defaulting to IX86

  Creating library matlab.lib and object matlab.exp

  C:/MATLAB/extern/include>

  警告信息不用理它。

b. 修改mex.h

该文件也在C:/MATLAB/extern/include目录

找到这一行:void mexFunction(

替换为 : __declspec( dllexport ) void mexFunction(

另保存为 :mex_vc.h

(2)启动VC,创建MFC AppWizard(dll)程序框架

(3)设置系统选项

a. 设定头文件和库文件路径

菜单Tools->Options->Directories

Include files:添加c:/matlab/extern/include

Library files:添加c:/matlab/extern/include

b. 设置编译连接选项

菜单Project->Settings

C/C++->Preprocessor definitions: 添加MATLAB_MEX_FILE

Link->Object/Library modules: 添加matlab.lib

1. 其它优化、调试以及头文件、库文件等选项看情况调整

2. Release版在General->Microsoft Foundation Classes选项中, 必须设置为Use

MFC in a Static Library. 原因不明 (4)编写DLL主程序

a. 文件名要用.cpp为扩展名,头两行必须是:

#include "stdafx.h"

#include "mex_vc.h"

b. 编写mexFunction函数,用如下格式声明:

void mexFunction(

int nlhs, mxArray *plhs[],

int nrhs, const mxArray *prhs[])

{

...

}

(5) 象普通VCDLL程序一样继续编写其它部分程序,加入其它模块

(6) 调试错误,用F7编译,生成DLL。我的例子:

--------------------Configuration: MatWave - Win32 Release------------------

--

Compiling resources...

Compiling...

StdAfx.cpp

Compiling...

MatWave.cpp

sample.cpp

mex.cpp

Generating Code...

Linking...

Creating library Release/MatWave.lib and object Release/MatWave.exp

LINK : warning LNK4089: all references to "SHELL32.dll" discarded by /OPT:RE

F

LINK : warning LNK4089: all references to "comdlg32.dll" discarded by /OPT:R

EF

MatWave.dll - 0 error(s), 2 warning(s)

大功告成,有两个警告,不理它。 拿到MATLAB里面试试吧,不过要有非法操作和异常退

出的心理准备哦.

另外:如果要在MATLAB运行中重新编译DLL,需先执行: clear mex

MATLAB中可调用的CFortran语言程序称为MEX文件。MATLAB可以直接把MEX文件视为它的内建函数进行调用。MEX文件是动态链接的子例程,MATLAB解释器可以自动载入并执行它。MEX文件主要有以下用途:

    对于大量现有的C或者Fortran程序可以无须改写成MATLAB专用的M文件格式而在MATLAB中执行。

 

发信人: roy (中国大兵), 信区: Matlab

  : vc中调用matlab的方法

发信站: 红果园 (2003110914:53:14 星期天), 站内信件

 

Matlab提供了多种与C/C++混合编程的方式

目前实现的有以下一些。

 1. COM组件编程。

 Matlab中,调用comtool工具,把.m文件编译成标准COM组件。

 这种方式是Matlab主推的方式。

 2. VC中的Matlab Addin,向导将.m文件直接编译成可执行文件。

 这也是比较标准的做法。在实验中,没有遇到任何问题。

 这种方法存在的问题是:生成的C语言代码基本不能改动,无法加入自己的代码。

 如果不调用图形界面,可以加入自己的代码。

 例如:其生成的主程序一般为

 int main(int argc, const char * * argv) {

      return mclMain(argc, argv, mlxReadd, 0, &_main_info);

 }

 不要调用mclMain函数,而是调用它带有原始接口的函数

 void mlxReadd(int nlhs, mxArray * plhs[], int nrhs, mxArray * prhs[])

 通常可以。不过这样略去了一些初始化的过程。具体可以参考Matlab帮助。

 自动生成的主程序做了如下工作。

  1. Defines persistent/global variables

  2. Initializes the feval function table for run-time feval support

  3. Performs wrapper-specific initialization and termination

  4. Initializes the constant pools generated by optimization

 我要实现的是下面这种,我觉得最简单,适合编写控制台程序。

 3. 直接写主程序,然后通过Matlab中编译的库机制,实现程序的混编。

 由于Matlab不提倡这种调用,在v6.5版中,没有这部分的帮助。参考Matlab6.1中的

Compiler

 手册的Mixing M-Files and C or C++ P110

 主程序的写法的例子为:main.c

 #include

MATLAB 图像信号处理 小波变换(18份) MATLAB通信仿真及应用实例详解 冈萨雷斯 数字图像处理 MATLAB 冈萨雷斯数字图像处理MATLAB图片 Visual C++ MATLAB图像处理与识别实用案例精选 MATLAB及其在电路与控制理论中的应用 MATLAB应用图像处理 北京交通大学《信号与系统》MATLAB 冈萨雷斯数字图像处理 北大研究生课件 MATLAB 7.X 图像处理 贺兴华编 2006年 电路与系统分析 使用MATLAB 信号与系统分析及MATLAB实现 MATLAB及在电子信息课程中的应用 现代通信系统 使用MATLAB MATLAB_usb摄像头视频获取 MATLAB 遗传算法 神经网络教程(17份) 神经网络理论与MATLAB 7实现 神经网络的综合基础 Matlab神经网络应用设计 MATLAB遗传算法工具箱及应 遗传算法与工程设计 遗传算法与工程优化 遗传算法:理论应用及软件实现 面向MATLAB工具箱的神经网络理论与应用 Matlab 6.5 辅助神经网络设计 车间调度及其遗传算法 神经网络及其在汽车工程中的应用 神经网络控制 神经网络PPT教程 BP神经网络详解与实例 机器学习 遗传算法原理及应用 人工神经网络技术及其应用 前馈神经网络工作机理分析与学习算法 MATLAB GUI 数值计算教程(21份) 清华 国防科大 中科院 建模课件合集 最全的MATLAB数学建模课件 MATLAB 7.x 界面设计与编译技巧 精通GUI 图形界面编程 MATLAB数值计算 工程计算可视化与MATLAB实现 偏微分方程的MATLAB解法 MATLAB 基础及数学软件 MATLAB工程数学应用 计算方法:算法设计及其MATLAB实现 MATLAB GUI 设计学习手记 Matlab数学建模算法全收录(数学建模比赛必备参考资料) 数理统计与MATLAB数据处理 数理统计与MATLAB数据处理 数值分析 现代数值计算方法 MATLAB和数学建模讲义 偏微分方程解的几道算例(差分、有限元) 含matlab程序 MATLAB GUI编程中文参考手册 MATLAB在数学建模竞赛中的应用 MATLAB接口 混合编程教程(9份) MATLAB扩展编程 MATLAB与C_C++混合编程 MATLAB混合编程与工程应用——目录在后 深入浅出 MATLAB 7.X 混合编程 C语言与MATLAB接口 编程与实例 精通Matlab与C C++ 混合程序设计 MATLAB与外部程序接口 Simulink 自动控制 电机电气教程(19份) MATLAB7 SIMULINK6 建模仿真开发与高级工程应用 基于MATLAB Simulink的系统仿真技术与应用 Simulink建模与仿真 Simulink动态系统建模与仿真基础 电力电子和电力拖动控制系统的MATLAB仿真 MATLAB电机仿真精华50例 MATLAB与SIMULINK工程应用 MATLAB SIMULINK 与控制系统仿真 先进PID控制 MATLAB仿真 电力系统的MATLAB-SIMULINK仿真与应用 滑模变结构控制MATLAB仿真 系统辨识及其MATLAB仿真 Simulink建模仿真基础及实例 PPT课件 Simulink建模仿真实例详解 PPT教程 入门教程 SIMULINK仿真基础 PPT教程 精品课件 Matlab与Simulink仿真
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值