DatasnapサーバーをXE 10.1 Berlinに移行しましたが、OUTパラメータを使用してservermethodを呼び出すと、サーバーでエラーが発生しました。このメソッドが発射された場合datasnap servermethodでOUTパラメータを使用したときのエラー
オブジェクト
TBtwlControlePar=class
xInDoc,
xHandmatig,
xStatus,
xVerwacht,
xAantal,
xVerwerkt,
xOnVerwerkt,
xOnverwerktInDocument,
xTotaalCustoms :Integer;
end;
function TPWAdminMethods.DOC_BTWAH_Get2(pPeriode, pMaand, pSort,pSelop,pSelOntvangen,pSelToegewezen,pSelVerwerkt: integer; pSel: string; out pControlePar: TBTWLControlePar): TResult;
ServerMethod
tmpM := TPWAdminMethodsClient.Create (DMForm.DSConnection.DBXConnection, false);
クライアント
FreeAndNil(fControlePar);
tmpResult := tmpM.DOC_VATLH_Get2(Jaar,sort,SelOp,SelOntvangen,SelToegewezen,SelVerwerkt,fSelection,fControlePar);
サーバは、この最後の行
procedure TDSMethod.Invoke(MethodInstance: TObject;
MethodValues: TDSMethodValues);
var
RContext: TRttiContext;
RType: TRttiType;
Params: TArrayOfTValue;
begin
Params := MethodValues.GetValues;
RType := RContext.GetType(MethodInstance.ClassType);
MethodValues.ReturnValue := RType.GetMethod(FMethodInfoHeader.NameFld.ToString).Invoke(MethodInstance, Params);
end;
にエラーが発生します
それはDBXJsonを使用せずにデルファイBerling Datasnapでのパラメータを使用することは不可能ですか?
クラスに*同じ*宣言を使用することをお勧めしますか? –
はい、TStreamオブジェクトなどでも問題が発生します。 –
型の安全性を失っても構わない場合は、単純に 'out'パラメータをポインタに変更して変換を行うことができます。 'TObject'に変換した後、それが実際に必要なクラスであることを確認する' is'を行い、 'TBtwlControlePar'に安全にハードキャストすることができます – Johan