【问题标题】:Error when using OUT parameters in datasnap servermethod在 datasnap servermethod 中使用 OUT 参数时出错
【发布时间】: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


【解决方案1】:

此错误消息和问题已作为 RSP-14895 记录在 Embarcadero 的质量门户上。这是其他人在 16May16 上发布的。那个人说“XE10没问题”。 今天(14Jun16)我在这个问题上添加了另一个测试项目。我的测试项目是针对 VAR 参数的情况。我还提供了正在运行的测试项目的屏幕截图。我的测试在 XE6 上工作,但在 10.1 Berlin 上失败。 在解决此问题之前,我无法使用 DataSnap。 请投票赞成这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-13
    • 2020-06-01
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 2021-04-23
    • 1970-01-01
    相关资源
    最近更新 更多