QPlugins 006.Delphiプラグイン、マルチサービスプレゼンテーション

次のようにデモ効果があります

実証プロジェクト、ファイル上のすべて、次のようにコードがあります

ユニット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 ' )]);
 エンド; 

終わり

 

おすすめ

転載: www.cnblogs.com/tianpan2019/p/11494914.html