次のようにデモ効果があります
実証プロジェクト、ファイル上のすべて、次のようにコードがあります
ユニットFrm_Main; インタフェースは 使用 Winapi.Windows、 Winapi.Messages、 System.SysUtils、 System.Variants、 System.Classes、 Vcl.Graphics、 System.Rtti、 Vcl.Controls、 Vcl.Forms、 Vcl.Dialogs、 Vcl.StdCtrls、 QSTRING、 QPluginsを qplugins_base、 qplugins_params、 Vcl.ExtCtrls。 入力 TForm_Main = クラス(TFormは) パネル1:TPanelと、 ボタン1:TButtonの。 MEMO1:TMemoオブジェクト。 手順FormCreate(送信者:TObjectを); 手順Button1Click(送信者:TObjectを); プライベート { プライベート宣言} 公共 { 公開宣言} エンド。 // 继承自TQService服务 TIntAddService = クラス(TQService) 公共の 機能(AParams:IQParams;のaResult:IQParams):実行ブール値。上書きします。STDCALL ; エンド; // 继承自TQService服务 TFloatAddService = クラス(TQService) 公共の 機能(AParams:IQParams;のaResult:IQParams):実行ブール値。上書きします。STDCALL; エンド; VARの Form_Main:TForm_Main、 実装 { 。$ R&LT * DFM } // 決定されたパラメータ型 関数(Aタイプの:TQParamType):IsIntTypeブール; 開始 検索結果を: Aタイプの= で[ptInt8、ptInt16、ptInt32、ptInt64、ptUInt8、ptUInt16、 ptUInt32、ptUInt64]; エンド; // 分析パラメータ型 関数IsFloatType(Aタイプの:TQParamType):ブール; 開始 検索結果を: Aタイプの= で[ptFloat4、ptFloat8]; エンド; { TFloatAddService } 関数TFloatAddService.Execute(AParams、のaResult:IQParamsを);ブール 開始 // 決意パラメータタイプはフロートである IF IsFloatType(AParams [ 0 ] .ParamType)及び([AParams IsFloatType 1 ] .ParamType) 次に ザ開始 // 2を追加パラメータ AResult.Add(' 結果' AParams = [:、ptFloat8).AsFloat 0 ] + .AsFloat [AParams 1 ]; .AsFloat :結果 = 真; 終了 他 結果: = falseは、 エンド; { TIntAddService }を 関数TIntAddService.Execute(AParams、のaResult:IQParamsを);ブール 開始 // 決意パラメータタイプは整数である IF IsIntType(AParams [ 0 ] .ParamType)及び([AParams IsIntType 1 ] .ParamType)次に ザが開始 // 2パラメータの追加 AResult.Add(' 結果を'、ptInt64).AsInt64:AParams = [ 0 ] + .AsInt64 [AParams 。1 ] .AsInt64; 結果: = 真; 終了 他 始める の検索結果を: = ;偽 終了; 終了; 手順TForm_Main.Button1Click(送信者:TObjectを); VARの AServices:IQServices; AParams、のaResult:IQParamsを、 手順のCalc; VAR I:整数; 始める //は、2人のサービス名を登録はTIntAddServiceとTFloatAddServiceある ため I:= 0 に AServices .count - 。1 行う 開始し たIF AServices [I] .Execute(AParams、のaResult)は、その後 始まる Memo1.Lines.Addを(' サービスを通じて' .nameのAServices + + [I] ' 計算が行われます。' ); 休憩; エンド; エンド; エンド; 始める // 2つのパラメータを作成 AParamsを:= TQParams 作成; のaResult:。= TQParams 作成; // 二つの整数の追加のコールタイプ AServicesを:= PluginsManager.ByPath(' サービス/ Adds- ')AS IQServices。 AParams.Add(' X- '、ptUInt8).AsInteger:= 100 ; AParams.Add(' Y '、ptUInt8).AsInteger:= 200 ; 計算値; Memo1.Lines.Add(' 算出式100 = + 200 'IntToStr +(のaResult [ 0 ] .AsInt64)); AParams.Clear; AResult.Clear; // 2つの浮動小数点加算呼び出し AParams.Add(' X- '、ptFloat8).AsFloat:= 100.3 ; AParams.Add(' Y '、ptFloat8).AsFloat:= 20.05 ; 計算値; Memo1.Lines.Add(' 計算式= + 100.3 20.05 ' + FloatToStr(のaResult [ 0 ] .AsFloat)); エンド; // 作成 手順TForm_Main.FormCreate (送信者:TObjectを) 開始 ReportMemoryLeaksOnShutdown: =真; //は、2人のサービス名がされている登録TIntAddServiceとTFloatAddService RegisterServices(' /サービス/ Adds- '、[TIntAddService。作成(NEWID、' いるAddInt ')、TFloatAddService。作成 (NEWID、' AddFloat ' )]); エンド; 終わり。