【发布时间】:2016-07-13 00:27:43
【问题描述】:
我将 Datasnap 服务器迁移到 XE 10.1 Berlin,现在当我使用 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;
服务器方法
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;
Delphi Berling Datasnap中不使用DBXJson就不能用out参数吗?
【问题讨论】:
-
你确定你对类使用了 same 声明——不仅仅是一个相似的?
-
是的,例如 TStream 对象也会出现问题。
-
如果您不介意失去类型安全性,您可以简单地将
out参数更改为指针并进行转换。转换为TObject后,执行is以检查它是否真的是您需要的类,然后您可以安全地将其硬转换为TBtwlControlePar
标签: delphi datasnap delphi-10.1-berlin