使用ActiveX实现在VB中调用Matlab

1 篇文章 0 订阅

 

从 Visual Basic .NET 客户端调用 MATLAB 函数

通过这两语句建立起与Matlab的链接

Dim MatLab As Object

MatLab = CreateObject("Matlab.Application")

下面这个示例通过 COM 接口从 Microsoft® Visual Basic® 客户端应用程序调用用户定义的 MATLAB® 函数 solve_bvp。它还在新 MATLAB 窗口中绘制图形并执行简单的计算:

Dim MatLab As Object
Dim Result As String
Dim MReal(1, 3) As Double
Dim MImag(1, 3) As Double

MatLab = CreateObject("Matlab.Application")

'Calling MATLAB function from VB
'Assuming solve_bvp exists at specified location
Result = MatLab.Execute("cd d:\matlab\work\bvp")
Result = MatLab.Execute("solve_bvp")

'Executing other MATLAB commands
Result = MatLab.Execute("surf(peaks)")
Result = MatLab.Execute("a = [1 2 3 4; 5 6 7 8]")
Result = MatLab.Execute("b = a + a ")
'Bring matrix b into VB program
MatLab.GetFullMatrix("b", "base", MReal, MImag)

Execute

在自动化服务器中执行 MATLAB 命令

Execute(command As String) As String

在 MATLAB 服务器中创建一个 6×6 矩阵,删除行 4–6,并将结果返回到客户端。 

Dim Matlab As Object
Dim server_version As String
Matlab = CreateObject("matlab.application")
MatLab.PutWorkspaceData("A","base",rand(6))
Matlab.Execute("A(4:6,:) = [];")
Matlab.GetWorkspaceData("A","base",B)

Feval 

Feval(String functionname, long numout, arg1, arg2, ...) As Object

传递参数

此示例说明如何使用 Feval 传递参数,以从 Visual Basic® .NET 客户端执行 MATLAB 自动化服务器上的 MATLAB 命令。

'在服务器上将两个字符串传递给 MATLAB 函数 strcat:
Dim Matlab As Object 
Dim out As Object 
out = Nothing 
Matlab = CreateObject("matlab.application") 
Matlab.Feval("strcat",1,out,"hello"," world") 
'以本地方式定义 clistr 并传递此变量:
Dim clistr As String
clistr = " world"
Matlab.Feval("strcat",1,out,"hello",clistr)
'传递服务器上定义的变量的名称:
Matlab.PutCharArray("srvstr","base"," world")
Matlab.Feval("strcat",1,out,"hello","srvstr=")

定义 Feval 返回值

Feval 返回元胞数组中的已计算函数的数据。元胞数组的每一行中有一个返回值。应使用 numout 参数控制返回值的数目。

Dim Matlab As Object
Dim out As Object
Matlab = CreateObject("matlab.application")
Matlab.Feval("fileparts",3,out,"d:\work\ConsoleApp.cpp")

 

创建服务器变量

要修改服务器变量 A,可以在客户端定义变量 rows 和 cols

'在服务器中创建矩阵 A。
Dim Matlab As Object
Dim server_version As String
Matlab = CreateObject("matlab.application")
MatLab.PutWorkspaceData("A","base",rand(6))
'调整 A 的形状。
rows = 6
cols = 3
Matlab.Feval("reshape",0,"A=",rows,cols)
'MATLAB 将表达式 'A=' 中的 A 解释为服务器的变量名称。
'reshape 函数并不修改变量 A。
Matlab.GetWorkspaceData("A","base",B)
'A 保持不变。
'要获取 reshape 函数的结果,请使用 numout 参数将该值指定给 C。
Matlab.Feval("reshape",1,"A=",rows,cols,C)

GetFullMatrix 

获取matlab工作区的矩阵

GetFullMatrix(varname As String, workspace As String, [out] XReal As Double, [out] XImag As Double)

GetFullMatrix 只适用于值类型为 double 的二维矩阵。将 GetVariable 或 GetWorkspaceData 用于其他类型。要使用更高维度的矩阵,需要在从 MATLAB® 接收二维矩阵后对其重构

GetVariable

获取matlab工作区变量

GetVariable(varname As String, workspace As String) As Object

对稀疏数组、结构体或函数句柄使用 GetVariable

如果您的脚本语言要求显式返回结果,请使用 GetVariable 函数代替 GetWorkspaceDataGetFullMatrix 或 GetCharArray

此示例使用 Visual Basic® .NET 客户端从 MATLAB® 自动化服务器读取数据:

Dim Matlab As Object
Dim Result As String
Dim C2 As Variant
Matlab = CreateObject("matlab.application")
Result = Matlab.Execute("C1 = {25.72, 'hello', rand(4)};")
C2 = Matlab.GetVariable("C1", "base")
MsgBox("Second item in cell array: " & C2(0, 1))

 

GetWorkspaceData

获取matlab工作区中数据

GetWorkspaceData(varname As String, workspace As String) As Object

对于 VBScript 客户端,使用 GetWorkspaceData 和 PutWorkspaceData 函数向 MATLAB® 工作区传递数值数据和从该工作区传出数值数据。这些函数使用 variant数据类型而非 GetFullMatrix 和 PutFullMatrix 使用的 safearray 数据类型。VBScript 不支持 safearray

PutFullMatrix

给自动化服务器工作区中的矩阵赋值

PutFullMatrix([in] varname As String, [in] workspace As String, [in] xreal As Double, [in] ximag As Double)

矩阵不能是标量或空数组,也不能大于两维。要使用更高维度的矩阵,请先将该矩阵重构为二维矩阵,再发送给 MATLAB® 服务器。然后,在从 MATLAB 收到矩阵之后,再将维度更改回来。

对于 VBScript 客户端,使用 GetWorkspaceData 和 PutWorkspaceData 函数向 MATLAB 工作区传递数值数据和从该工作区传出数值数据。这些函数使用 variant 数据类型代替 VBScript 不支持的 safearray

本示例使用 Visual Basic® .NET 客户端来将矩阵写入到服务器的基础工作区

Dim MatLab As Object
Dim XReal(4, 4) As Double
Dim XImag(4, 4) As Double
Dim ZReal(4, 4) As Double
Dim ZImag(4, 4) As Double
Dim i, j As Integer

For i = 0 To 4
   For j = 0 To 4
   XReal(i, j) = Rnd() * 6
   XImag(i, j) = 0
   Next j
Next i

Matlab = CreateObject("matlab.application")
MatLab.PutFullMatrix("M","base",XReal,XImag)
MatLab.GetFullMatrix("M","base",ZReal,ZImag)

使用 Visual Basic .NET 客户端来将矩阵写入到服务器的全局工作区:

Dim MatLab As Object
Dim XReal(1,2) As Double
Dim XImag(1,2) As Double
Dim result As String
Dim i,j As Integer

For i = 0 To 1
	For j = 0 To 2
		XReal(i,j) = (j * 2 + 1) + i
		XImag(i,j) = 1
	Next j
Next i

Matlab = CreateObject("matlab.application")
MatLab.PutFullMatrix("X","global",XReal,XImag)
result = Matlab.Execute("whos global")
MsgBox(result)

 PutWorkspaceData

PutWorkspaceData(varname As String, workspace As String, data As Object)

使用 PutWorkspaceData 分别将数值和字符数组数据传递到服务器。请对稀疏数组、结构体或函数句柄使 PutWorkspaceData。对这些数据类型使用 Execute 方法。

GetWorkspaceData 和 PutWorkspaceData 函数将数值数据作为 variant 数据类型传递。这些函数对 VBScript 客户端特别有用,因为 VBScript 不支持 GetFullMatrix 和 PutFullMatrix 使用的 safearray 数据类型。

将数据存入变量A中

Dim Matlab As Object
Dim data(6) As Double
Dim i As Integer
MatLab = CreateObject("matlab.application")
For i = 0 To 6
   data(i)  = i * 15
Next i
MatLab.PutWorkspaceData("A","base",data)
MsgBox("In MATLAB, type" & vbCrLf & "A")

 

示例

 

......

https://ww2.mathworks.cn/help/matlab/call-matlab-com-automation-server.html

 

利用activeX实现matlabvb的混合编程-vb_matlab_activeX.rar      想要在vb里面直接执行matlab的代码吗?想省去编译dll文件的代码吧?     好的,activeX帮你实现这样的功能.     activeX简介: ActiveX部件是Microsoft公司提供的一种用于模块集成的新的协议,它是Visual Basic工具箱的扩充部分。在程序加入ActiveX后,它将成为开发和运行环境的一部分。Matlab实现ActiveX自动化服务支持,在Visual Basic下通过ActiveX自动化接口可将Matlab作为Visual Basic语言的一个ActiveX部件调用实现VBMATLAB间的无缝集成,该方式比较适合C/S模式,具有自动化程度高、效率高、占用资源少、数据交换能力强等优点,大大缩短了程序开发周期,优化了系统性能。 activeX运用: 使用ActiveX部件,首先必须获得Matlab ActiveX对象在系统注册表定义的名字─Matlab.Application。在VB创建ActiveX对象的代码如下: Dim Matlab as Object. Set Matlab = CreateObject Matlab.Application对象主要有3个函数,具体如下: (1) BSTR Execute([in]BSTR Command)方法 接受单一的字符串(Command), MATLAB将运行命令及结果作为一个字符串返回。用于执行一个合法的MATLAB命令; (2) PutFullMatrix方法 void PutFullMatrix pr, [in] SAFEARRAY pr, [in] SAFEARRAY pi ) 将一个指定变量名的一维或二维数组(mxArray)放入工作空间。 (3) GetFullMatrix方法 void GetFullMatrix pr, [in] SAFEARRAY pr, [in] SAFEARRAY pi ) 通过GetFullMatrix方法,从指定的工作空间检索一个完整的一维或二维的实型或虚型数组(mxArray),其实部和虚部分别存放到两个单独的Double型数组。[2] 通过这三种方法,可以方便地利用Matlab执行命令,从VBMatlab输送数据或者从Matlab获取数据。 实例举例: 1.程序功能: 给出三个变量:x=0:0.05*pi:10*pi;y=sin;z=cos 并且做出x,y,z的三维图形,并在vb的image窗口显示,             下面是vb程序的界面,只有一个command按钮和image图片框    程序界面.jpg 下面是程序的运行结果: 程序运行结果.jpg 2.代码 Dim Matlab As Object Dim Result1 As String Dim Result2 As String Dim Result3 As String Private Sub Command1_Click() Result1 = Matlab.Execute;z=cos") Result2 = Matlab.Execute") Result3 = Matlab.Execute") Image1.Picture = Clipboard.GetData() Call Matlab.quit '退出Matlab End Sub Private Sub Form_Load() Set Matlab = CreateObject End Sub 3.程序源程序: vb_matlab_activeX.rar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值