© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved.    wwwki
VB 与Matlab 混合编程中实现字符数组传递的方法
卢小武 严世榕
(福州大学机械工程及自动化学院福建,福州350002)
【摘 要】 利用ActiveX 技术,在V B 中调用M atlab 的混合编程中,使用M atlab 自动化对象的Getchararray 和
PutCharA rray 方法,实现了V B 和M atlab 之间字符数组的传递。【关键词】 ActiveX  M atlab 语言 V B  字符数组  一、引言
Matlab 语言及其系统是Math works 公司推出的一套高效率的科学计算软件,它使用方便、功能强大,受到了社会各界广泛关注。Matlab 集数值分析、信号处理、仿真控制、数理统计等功能于一体,在工业领域中得到广泛的运用。但是Matlab 的界面开发能力较差,并且数据输入也比较困难。Visual Basic (以下简称VB )是微软公司推出的一种可视化编程工具,采用面向对象的编程技术,界面友好,是公认的一种编程效率最高的编程方法之一。VB 与Matlab 的混合编程,利用VB 友好的图形界面,弥补Matlab 的界面开发能力差的问题。开发过程中,笔者使用的是VB6.0版本和Matlab6.5.1版本。
二、基本原理
VB 中没有matlab 的外部接口程序,因此给VB 与matlab 的混合编程带来了不便。利用ActiveX 技术可以实现在VB 中调用Matlab 。
ActiveX 技术是微软公司提供的一种用于模块集成的新的协议。Activex 部件是VB 工具箱的补充。Matlab 也支持Ac 2tivex 技术,即可以在Matlab 环境下运行其它程序的Activex 部件,也可以在其它程序中运行Matlab 的Activex 部件。因此,在VB 中利用Activex 自动化接口可将matlab 作为VB 的一个Ac 2tivex 部件来调用。这样就可以在VB 程序中调用Matlab 的命令,向Matlab 传送或从Matlab 中接收数据。
在Windows 注册表中,Matlab 的ActiveX 对象名为“Mat 2lab.Application ”。在VB 应用程序中创ActiveX
对象个体的步骤如下:
Dim Matlab as object
Set Matlab =CreateObject (“
Matlab.Application ”)在VB 应用程序中创建Matlab 的ActiveX 对象,就可以使用该对象所包含的方法来实现对Matlab 的调用。Matlab6.5以下版本中,Matlab.Application 对象含有6个方法,如表1所示。表1Matlab6.5以下版本VB 中调用matlab 对象包含的方法
方法
功能
Execute 执行自动化服务matlab 命令G et FullMatrix 从matlab 自动化服务中取出矩阵Put FullMatrix
矩阵传递到matlab 自动化服务中MaximizeCommandWindow 在windows 桌面上显示matlab 窗口
MinimizeCommandWindow
最小化窗口
Quit
结束matlab 自动化服务
  在matlab6.5以下版本中,采用G et FullMatrix 和Put Full 2Matrix 方法,可以实现1维或2维数值数组在VB 和Matlab 之间的传递,而不能传递字符数组。在Matlab6.5及其以上的版本,采用PutCharArray 和Put FullMatrix 方法,则可以实现在VB 与Matlab 之间的传递字符串数组,而且该方法可以支持中文字符数组的传递。
表二Matlab6.5及其以上版本中新增的方法
方法
功能
G etCharArray 从matlab 自动化服务中取得字符数组PutCharArray
字符数组传递到matlab 自动化服务中
  PutCharArray 方法和Put FullMatrix 的方法具体的应用格式为:
void G etCharArray ([in ]BSTR name ,[in ]BSTR workspace ,
[out ]BSTR string );void PutCharArray ([in ]BSTR name ,[in ]BSTR workspace ,
[in ]BSTR string )
;
其中:[in ]BSTR name ———表示Matlab 工作空间中的变量名称;
[in ]BSTR workspace ———表示Matlab 的工作空间;[in ]BSTR string ———表示具体的字符数组或者V
B 中的变量名。
三、应用举例
下面通过一个具体的例子来说明利用PutCharArray 和Put FullMatrix 方法,实现字符串数组在VB 与Matlab 间的传递的方法。
图1实例界面及运行结果
在VB 中新建一个工程,在工程中的“Reference ”中,添加”Matlab Automation Server Type Library ”,这样就可以利用Ac 2tiveX 服务技术实现在VB 中调用Matlab 。如图1所示,在工程新建的窗体中放置两个文本控件,两个标签控件,两个命令按钮控件。控件txt1用来输入原始的字符串OriginString ,而txt2控件用来显示从matlab 传递过来的字符串。
在cmd1命令按钮的单击过程中添加以下代码:
Private Sub cmd1-Click ()
Dim OriginSting as String Dim matlab As Object
S et matlab =CreateObject (“matlab.application ”) ‘建立matlab.application 对象
OriginString =txt1.T ext  ‘把txt1的中输入的文本,赋给OriginString 变量
Call matlab.PutCharArray (“OriginStringInMatlab ”,“base ”,OriginString ) ‘把Ori 2
ginString 变量的值传递给matlab 的工作空间的OriginStringInMatlab 变量
matlab.Execute (“NewString =OriginStringInMatlab (end :-1:1)”)  ‘把Origin 2
StringInMatlab 字符变量转置
txt2.T ext =matlab.G etCharArray (“NewString ”,“base ”)  ‘把Matlab 工作空
间中NewString 变量的值取出赋给txt2,并在txt2中显示出来。
End Sub
如图1所示,在txt1文本控件中输入“example :这是一个例
子。”字符串,单击“执行”命令按钮后,在txt2文本控件中显示的是“。子例个一是这:elpmaxe ”。因此,使用PutCharArray 和Put FullMatrix 方法可以实现在VB 与Matlab 之间的字符数组的传递。
四、结论
利用ActiveX 技术可以在VB 调用Matlab ,使用matlab 对象的2个新增的方法:PutCharArray 和Put FullMatrix ,可以方便的实现在VB 和Matlab 间传递字符数组。从而可以在VB 中实务,因此VB 与Matlab 的混合编程,可以为科研工作和工程应用提供有力的技术支持。
matlab二进制字符串转数组
 参考文献
[1]External Interface Reference[M ].The MathWorks ,Inc.,2003
86福 建 电 脑            2004年第12期

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。