3

我正在将项目从 Delphi 2006 升级到 Delphi XE2 并遇到编译错误没有可以使用这些参数调用的“SendMsg”的重载版本。 这是问题所在的代码。

procedure TMessageComms.UpgradeError(Msg: String);
begin
  FConnection.SendMsg(cUpgradeError, Msg, FConnection.GetNextMsgID);
end;

SendMsg 方法如下所示。

procedure SendMsg(ACommand, AParamStr : String; AMsgID : Integer); overload;

procedure TMsgConnection.SendMsg(ACommand, AParamStr: String; AMsgID: Integer);
begin
  // construct message
  // send message
end;

cUpgradeError 是一个像这样声明的 const。

 cUpgradeError = 'UpgradeError';

这是返回整数的 GetNextMsgID 函数。

function TMsgConnection.GetNextMsgID: Integer;
begin
  Inc(FLastMsgID);
  Result := FLastMsgID;
end;

这些参数对我来说似乎都是有效的。我已设法将其范围缩小到与 GetNextMsgID 函数有关但不确定是什么的程度。如果我将从函数返回的值转换为整数,那么它编译得很好,但我不明白为什么我必须这样做。

4

1 回答 1

2

我的猜测是FConnection.SendMsg(cUpgradeError, Msg, FConnection.GetNextMsgID);试图解释FConnection.GetNextMsgID为函数指针而不是函数结果。

将其更改为,FConnection.SendMsg(cUpgradeError, Msg, FConnection.GetNextMsgID());以便清楚地表明您正在寻找函数结果。

于 2013-01-20T20:06:53.753 回答