メインコンテンツ

引数の引き渡し

概要

MATLAB® 関数をカプセル化する場合、MATLAB Compiler SDK™ 製品は、作成するクラス メソッドの引数リストに MATLAB 関数の引数を追加します。したがって、MATLAB 関数が vararginvarargout の一方または両方を使用する場合、コンパイラはこれらの引数をクラス メソッドの引数リストに追加します。これらは、入力引数と出力引数の引数リストの最後に追加されます。

Variant 配列を作成し、配列の各要素をそれぞれの入力引数に代入することで、複数の引数を varargin 配列として渡せます。

入力引数と出力引数のマッピングの詳細については、Producing a COM Classを参照してください。

Microsoft Visual Basic プログラムでの varargin 配列の作成および使用

次の例では、y=foo(varargin) という形式の MATLAB 関数をカプセル化するメソッドを呼び出すために、varargin 配列を作成しています。

MWComUtil ユーティリティ ライブラリに含まれる MWUtil クラスは varargin パラメーターを作成するための補助関数 MWPack を提供します。

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 引数を 3 つの個別の引数として処理します。この関数はユーティリティ ライブラリ内の関数 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® からの関数シグネチャはより厳格であり、varargin が MATLAB 関数入力の間に存在する場合は、空にする場合でも VBA 呼び出しには varargin を含めなければなりません。空の varargin を渡すためには、Null バリアントを渡します。渡された後、空の MATLAB cell 配列に変換されます。

VBA コードからの空の varargin の引き渡し

次の例では、空の varargin を渡すために null のバリアントを渡す方法を示しています。

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