System.ObjAuto.ObjectInvoke
Delphi
function ObjectInvoke(Instance: TObject; MethodHeader: PMethodInfoHeader; const ParamIndexes: array of Integer; const Params: array of Variant): Variant;
C++
extern DELPHI_PACKAGE System::Variant __fastcall ObjectInvoke(System::TObject* Instance, PMethodInfoHeader MethodHeader, const int *ParamIndexes, const int ParamIndexes_High, const System::Variant *Params, const int Params_High);
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
function | public | System.ObjAuto.pas System.ObjAuto.hpp |
System.ObjAuto | System.ObjAuto |
説明
オブジェクトのメソッドを動的に呼び出します。
ObjectInvoke を使用してオブジェクトのメソッドを動的に呼び出します。このメソッドでは、十分な型情報が必要です。
パラメータ | 説明 |
---|---|
Instance | メソッドが属するクラスのインスタンス。 |
MethodHeader | メソッドの型情報を表します。GetMethodInfo で取得できます。 |
ParamIndexes | 各パラメータのインデックスの配列。インデックスは 1 から始まります。インデックス数は、パラメータ数に一致する必要はありません。残ったパラメータは、インデックスの残りの部分に相当するとみなされます。ParamIndexes は字句順です(Params の逆字句順とは異なります)。 |
Params | Variant 型の配列で、関数呼び出し用の各パラメータが入ります。パラメータの順序は、逆字句順(最終パラメータが最初に)です。 |
ObjectInvoke は次のオブジェクトを呼び出しできます。
- 31 パラメータ メソッド(戻り型なし)
- 30 または 31 パラメータ メソッド(戻り型あり)
レコード型や String 型などの複合戻り型では隠蔽パラメータが必要な場合があります。この場合、ObjectInvoke で 30 パラメータ メソッドを呼び出しできます。
ObjectInvoke では、オーバーロードされたメソッドを解決しません。GetMethodInfo は、オーバーロードされたメソッドに対してメソッド リストの最初のエントリを返します。適切なメソッドを選択するには、System.Rtti.TRttiType.GetMethods 関数または他の RTTI 関数を使用できます。また、ObjectInvoke ではデフォルト パラメータをサポートしません。
ObjectInvoke では、パラメータ数、各パラメータの型、戻り型を決定するために System.Rtti 情報が必要です。呼び出しメソッドに十分な System.Rtti 情報がない場合は、ObjectInvoke により、Exception クラス(SNoRTTIInfoType メッセージ)が発生します。次の各メソッドでは、System.Rtti 情報がありません。
- Safecall メソッド
- オープン配列を持つ任意のパラメータ(例:
procedure foo( ary: array of integer )
) - 値指定の列挙型を持つ任意のパラメータ(例:
TFoo = (a, b, c = 100)
)
Windows 32 および OSX 32 の場合の注意:
(Windows の)OLE Variant 型では、80 ビットの Extended 型をサポートしないので、Variant 型では、80 ビット/10 バイトの Extended 浮動小数点値を保存できません。メソッドに Extended 型パラメータがある場合、またはメソッドが Extended 型値を返す場合は、ObjectInvoke は、EObjectInvokeExtendedTypeException クラスを発生します。
メソッドの戻り型が Extended 型である場合、ObjectInvoke はそのメソッドを呼び出し、Extended 値を取得し、EObjectInvokeExtendedTypeException を元の Extended 値とともに発生します。アプリケーションは、元の戻り値を取得するために Ext プロパティにアクセスできます。
新しい RaiseExceptionForExtendedType フラグが System.ObjAuto ユニットに導入されました。このフラグは TRUE がデフォルトの設定です。
- フラグが True の場合、ObjectInvoke は前のバージョンと同じ動作をします。パラメータに Extended 型が含まれる場合、または戻り型が Extended 型である場合は、ObjectInvoke は例外を発生します。
- フラグが False の場合、ObjectInvoke は任意の Extended 型パラメータを 64 ビット Double 型に変換してから、メソッドを呼び出し、Extended 戻り値を Double に変換します。
関連項目
- System.ObjAuto.PMethodInfoHeader
- System.ObjAuto.TMethodInfoHeader
- System.ObjAuto.GetMethodInfo
- System.ObjAuto.EObjectInvokeExtendedTypeException
- System.ObjAuto.RaiseExceptionForExtendedType
- System.ObjAuto.EObjectInvokeExtendedTypeException.Ext
- System.Rtti.Invoke
- System.Rtti.TValue
- System.Extended
- System.Variant
- System.Double