Main Content

クラス インスタンスのメソッドの呼び出し

標準マッピング手法

クラス インスタンスを作成した後、クラス メソッドを呼び出して、カプセル化された MATLAB® 関数にアクセスできます。MATLAB Compiler SDK™ 製品は標準手法を使用して、元の MATLAB 関数構文をメソッドの引数リストにマッピングします。標準マッピング手法は以下のとおりです。

  • nargout

    メソッドに出力引数がある場合、最初の引数は常に Long 型の nargout です。この入力パラメーターは通常の MATLAB nargout パラメーターをカプセル化された関数に渡し、必要な出力の数を指定します。出力引数をもたないメソッドは nargout 引数を渡しません。

  • 出力パラメーター

    nargout の後には、元の MATLAB 関数の左辺と同じ順序でリストされた出力パラメーターが続きます。

  • 入力パラメーター

    次に元の MATLAB 関数の右辺と同じ順序でリストされた入力パラメーターが続きます。

たとえば、次のようなごく一般的な MATLAB 関数があるものとします。

function [Y1, Y2, ..., varargout] = foo(X1, X2, ..., varargin)

この関数は、次の Microsoft® Visual Basic® シグネチャに直接マッピングされます。

Sub foo(nargout As Long, _
        Y1 As Variant, _
        Y2 As Variant, _
        .
        .
        varargout As Variant, _
        X1 As Variant, _
        X2 As Variant, _
        .
        .
        varargin As Variant)

MATLAB 関数から COM クラス メソッド呼び出しへの標準マッピングの詳細と例については、Calling Conventionsを参照してください。

Variant

すべての入力引数および出力引数は Visual Basic の既定のデータ型である Variant 型になります。Variant 型は Visual Basic の任意の基本型、任意の型の配列およびオブジェクト参照を保持できます。任意の基本型と MATLAB データ型間の変換の詳細については、データ変換を参照してください。

一般的に、Visual Basic ユーザー定義型 (UDT) を例外として、任意の Visual Basic 型をクラス メソッドの引数として指定することができます。

単純な Variant 型を出力パラメーターとして渡すと、呼び出されたメソッドは受け取ったデータを割り当て、Variant の元の内容を解放します。この場合、それぞれの出力引数を単一の Variant として設定すれば十分です。オブジェクト型 (Excel® Range など) が出力パラメーターとして渡される場合、オブジェクト参照が双方向に渡され、オブジェクトの Value プロパティがデータを受け取ります。

入出力パラメーターを渡す

以下の例では、Visual Basic で入出力パラメーターを COM コンポーネント クラス メソッドに渡す方法を示します。

最初の例は、2 つの引数を受け取り、1 つの出力引数を返す関数 foo です。関数 foo は、function y = foo(x1,x2) という形式の MATLAB 関数に対応するクラス メソッドの呼び出しをディスパッチします。

Function foo(x1 As Variant, x2 As Variant) As Variant
   Dim aClass As Object
   Dim y As Variant
   
   On Error Goto Handle_Error
   Set aClass = CreateObject("mycomponent.myclass.1_0")
   Call aClass.foo(1,y,x1,x2)
   foo = y
   Exit Function
Handle_Error:
   foo = Err.Description
End Function

2 番目の例では、関数 foo をサブルーチンとして書き換えます。

Sub foo(Xout As Variant, X1 As Variant, X2 As Variant)
   Dim aClass As Object

   On Error Goto Handle_Error
   Set aClass = CreateObject("mycomponent.myclass.1_0")
   Call aClass.foo(1,Xout,X1,X2)
   Exit Sub
Handle_Error:
   MsgBox(Err.Description)
End Sub