System.ObjAuto.ObjectInvoke

提供: RAD Studio API Documentation
移動先: 案内検索

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 に変換します。
メモ: Invoke メソッドと TValue 型では、Extended 型を処理できます。

関連項目

コード例