主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

传递参量

概述

当封装 MATLAB® 函数时,MATLAB Compiler SDK™ 产品会将 MATLAB 函数参量添加到它创建的类方法的参量列表中。因此,如果 MATLAB 函数使用 varargin 和/或 varargout,编译器会将这些参量添加到类方法的参量列表中。它们被添加在输入和输出参量的参量列表的末尾。

您可以通过创建 varargin 数组将多个参量作为 Variant 数组传递,并将数组的每个元素分配给相应的输入参量。

生成 COM 类有关输入和输出参量映射的更多信息。

Microsoft Visual Basic 程序中创建和使用 varargin 数组

下面的示例创建一个 varargin 数组来调用封装形式为 y=foo(varargin) 的 MATLAB 函数的方法。

MWUtil 实用工具库中包含的 MWComUtil 类提供了 MWPack 辅助函数来创建 varargin 参数。

Function foo(x1 As Variant, x2 As Variant, x3 As Variant, _
             x4 As Variant, x5 As Variant) As Variant
   Dim aClass As Object
   Dim v(1 To 5) As Variant
   Dim y As Variant 
   
   On Error Goto Handle_Error
   v(1) = x1
   v(2) = x2
   v(3) = x3
   v(4) = x4
   v(5) = x5
   aClass = CreateObject("mycomponent.myclass.1_0")
   Call aClass.foo(1,y,v)
   foo = y
   Exit Function
Handle_Error:
   foo = Err.Description
End Function

Microsoft Visual Basic 程序中创建和使用 varargout

下一个示例将 varargout 参量作为三个单独的参量进行处理。该函数使用实用工具库中的 MWUnpack 函数。

使用的 MATLAB 函数是 varargout=foo(x1,x2)

Sub foo(Xout1 As Variant, Xout2 As Variant, Xout3 As Variant, _
        Xin1 As Variant, Xin2 As Variant)
   Dim aClass As Object
   Dim aUtil As Object
   Dim v As Variant
    
   On Error Goto Handle_Error
   aUtil = CreateObject("MWComUtil.MWUtil")
   aClass = CreateObject("mycomponent.myclass.1_0")
   Call aClass.foo(3,v,Xin1,Xin2)
   Call aUtil.MWUnpack(v,0,True,Xout1,Xout2,Xout3)
   Exit Sub
Handle_Error:
   MsgBox(Err.Description)
End Sub

Microsoft Visual Basic 代码传递空的 varargin

在 MATLAB 中,函数的 varargin 输入是可选的,可以在函数调用中出现或省略。但是,从 Microsoft® Visual Basic® 开始,函数签名更加严格 - 如果 MATLAB 函数输入中存在 varargin,则 VBA 调用必须包含 varargin,即使您希望它为空。要传入一个空的 varargin,请传递 Null 变量,该变量在传递时会转换为空的 MATLAB 元胞数组。

从 VBA 代码传递空的可变参数

下面的示例说明了如何传递 null 变量以传递空的 varargin

Function foo(x1 As Variant, x2 As Variant, x3 As Variant, _ 
             x4 As Variant, x5 As Variant) As Variant 
   Dim aClass As Object 
   Dim v(1 To 5) As Variant 
   Dim y As Variant 
    
   On Error Goto Handle_Error 
   v(1) = x1 
   v(2) = x2 
   v(3) = x3 
   v(4) = x4 
   v(5) = x5 
   aClass = CreateObject("mycomponent.myclass.1_0") 

   'Call aClass.foo(1,y,v) 
   Call aClass.foo(1,y,Null) 

   foo = y 
   Exit Function 
Handle_Error: 
   foo = Err.Description 
End Function