我是靠谱客的博主 跳跃外套,最近开发中收集的这篇文章主要介绍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,所以这是造成阻塞的主要原因。

最后

以上就是跳跃外套为你收集整理的matlab7.0怎么编程,Matlab(matlab7.0 R14版本)+vs2008混合编程三个问题的全部内容,希望文章能够帮你解决matlab7.0怎么编程,Matlab(matlab7.0 R14版本)+vs2008混合编程三个问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部