matlab7.0怎么编程,Matlab(matlab7.0 R14版本)+vs2008混合编程三个问题

问题1:混编步骤

以vs调用matlab生成dll为例(提前在vs环境中设置好VC++目录的bin、include、lib路径)

首先,在matlab中编写欲实现功能的m函数文件

然后,调用mcc –W cpplib:函数名 –T link:lib

函数名.m在当前目录下生成若干相关文件,其中.h, .lib, .dll, .ctf文件为vs调用所需

其次,在vs中项目属性-连接器-输入-附加路径里添加包含.lib,工程中#include .h 就可以使用了

最后,使用时应注意Initialize和terminate

问题2:在程序运行过程中,通过try{} catch{}捕获mwException异常,总会出现“Invalid

Input”的错误。

开始,怀疑mwArray的使用(构造字符串,CString转mwArrary)有问题,构造mwArray类型的输入参数时,由于未找到在调试状态下查看mwArray内容的方法,更换了多种CString字符串转换方法,仍未解决。

后来,偶然发现ctf文件并未使用,于是把该文件拷入工程目录下,该问题解决。

对ctf文件的作用做进一步了解发现,ctf文件才是最主要的,内部包含着matlab函数的数据

问题3:调用多个matlab生成的dll时,不同dll的Initialize顺序调用,后面Initialize会阻塞。

涉及到两个方面需要解决:A、为什么会阻塞,Initialize的作用和效果是什么?

B、多个dll调用的初始化应该怎么进行?有没有先后顺序?是不是只能初始化1次?

对于vc调用matlab的dll,关于initialize是有要求的,见

Caution Terminate will bring

down enough of the MCR address space that the same library (or any

other library) cannot be initialized. Issuing a Initialize call

after a Terminate call causes unpredictable results. Instead, use

the following structure:

…code…

mclInitializeApplication();

lib1Initialize();

lib2Initialize();

……

lib1Terminate();

lib2Terminate();

mclTerminateApplication();

…code…

需要先调用mclApplicationInitialize,然后调用库文件的initialize。程序结束时,先调用库文件的Terminate,然后调用mclApplicationTerminate。一个dll的Terminate会影响随后的Initialize,所以这是造成阻塞的主要原因。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 第1章 matlab概述. 1.1 matlab的发展历程 1.2 matlab产品组成及语言特点 1.2.1 matlab的主要产品构成 1.2.2 matlab语言的特点 1.3 matlab 7.0的新功能和新产品 1.3.1 matlab 7.0的新功能 1.3.2 matlab升级及新增的模块 1.4 小结 第2章 matlab程序设计及代码优化 2.1 matlab的表达式和变量 2.1.1 表达式 2.1.2 变量 2.2 细胞数组与结构数组 2.2.1 细胞数组 2.2.2 结构数组 2.3 类与对象 2.4 流程控制 2.4.1 for循环结构 2.4.2 while循环结构 .2.4.3 if-else-end分支结构 2.4.4 switch-case结构 2.4.5 try-catch结构 2.5 m文件编程 2.6 m文件编程规范 2.7 m文件评述器 2.8 提高m文件执行效率的技巧 2.8.1 矢量化操作 2.8.2 给数组预定义维 2.8.3 下标或者索引操作 2.8.4 尽量多使用函数文件而少使用非脚本文件 2.8.5 将循环体中的内容转换为c-mex 2.8.6 内存优化 2.9 小结 第3章 matlab混合编程简介 3.1 进行混合编程的出发点 3.2 matlab应用程序接口简介 3.3 几种常见的混合编程方法简介 3.3.1 使用matlab自带的matlab compiler 3.3.2 利用matlab引擎 3.3.3 利用activex控件 3.3.4 利用mat文件 3.3.5 c-mex 3.3.6 利用mideva/matcom 3.3.7 利用matrix[lib]实现混合编程 3.3.8 利用matlab add-in 3.3.9 matlab com builder 3.3.10 matlab和excel混合编程 3.4 小结 第4章 c-mex编程 4.1 c-mex简介 4.2 mex文件系统的配置 4.3 mex文件的结构和运行 4.3.1 mex文件结构 4.3.2 mex函数的执行流程 4.3.3 mex文件的结构和使用 4.3.4 mex文件与独立应用程序的区别 4.4 c语言mex函数 4.5 c-mex混合编程 4.6 visual c++中mex文件的建立和调试 4.6.1 visual c++中mex程序的建立和环境设置 4.6.2 mex程序的调试 4.6.3 mex独立应用程序的发布 4.7 mex编程实例 4.8 小结 第5章 通过matlab引擎实现混合编程 5.1 matlab引擎简介 5.2 matlab引擎库函数 5.3 visual c++调用matlab引擎时的环境设置 5.4 matlab引擎类的封装 5.4.1 cmatlabeng类的定义和实现代码 5.4.2 cmatlabeng说明 5.4.3 cmatlabeng说明和使用方法 5.5 应用实例 5.6 小结 第6章 mat文件实现数据共享 6.1 mat文件简介 6.2 操作mat文件 6.2.1 mat文件格式 6.2.2 操作mat文件的matlab api 6.3 visual c++调用mat时的环境设置 6.4 实例 6.5 小结 第7章 利用mideva实现混合编程 7.1 mideva简介 7.2 mideva的安装 7.3 mideva环境下m文件到dll/exe文件的转换 7.4 visual c++环境下使用mideva混合编程 7.4.1 混合编程环境的设置 7.4.2 通过外壳函数调用 7.5 matrix[lib] 7.6 混合编程实例 7.7 小结 第8章 利用matrix[lib]实现混合编程 8.1 matrix[lib]简介 8.2 matrix[lib]与visual c++混合编程 8.2.1 matrix[lib]的安装 8.2.2 visual c++环境配置 8.2.3 初始化库 8.3 matrix[lib]函数使用参考 8.3.1 矩阵操作 8.3.2 库常量 8.3.3 访问库函数 8.3.4 矩阵i/o 8.3.5 图形函数 8.4 混合编程实例 8.5 matlab数学库 8.5.1 简介 8.5.2 visual c++工程中调用matlab数学函数库的环境设置 8.6 小结.. 第9章 通过matlab add-in实现混合编程 9.1 matlab add-in简介 9.2 matlab add-in安装和在visual c++中的环境设置 9.3 通过matlab add-in生成独立应用程序 9.4 matlab add-in实例 9.5 小结 第10章 matlab和delphi混合编程 10.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值