开发者

How to pass "nil" constant to the untyped parameter?

is it possible to pass nil as an undeclared constant to the untyped parameter of some function? I have functions like these and I would like to pass some constant to the Data parameter to satisfy the compiler. Internally I'm deciding by the Size parameter. I know I can use Pointer instead of untyped parameter but it's much more comfortable for my case.

Now I'm getting E2250 There is no overloaded version of 'RS232_SendCommand' that can be called with these arguments

function RS232_SendCommand(const Command: Integer): Boolean; overload;
begin
  // is it possible to pass here an undeclared constant like nil in this example?
  Result := RS232_SendCommand(Command, nil, 0);
end;

function RS232_SendCommand(const Command: Integer; const Data; const Size: Integer): Boolean; overload;
begin
  ...
end;

This works, but I would be glad if I could leave the variable declaration.

function RS232_SendCommand(const Command: Integer): Boolean; overload;
var
  Nothing: Pointer;
begin
  Result := RS23开发者_开发百科2_SendCommand(Command, Nothing, 0);
end;

Solution is to use somthing like this.

function RS232_SendCommand(const Command: Integer): Boolean; overload;
begin
  // as the best way looks for me from the accepted answer to use this
  Result := RS232_SendCommand(Command, nil^, 0);

  // or it also possible to pass an empty string constant to the untyped parameter
  // without declaring any variable
  Result := RS232_SendCommand(Command, '', 0);
end;

I'm doing this because some of my commands have a data sent after command transmission.

Thanks for the help


Easy:

RS232_SendCommand(Command, nil^, 0);

You just need to make sure that you don't access the Data parameter from inside RS232_SendCommand, but presumably that's what the 0 size parameter is for.

To my mind this is the best solution because it very explicitly states that you are passing something that cannot be accessed.


No, you can not. not that I knew of

Untyped Parameters

You can omit type specifications when declaring var, const, and out parameters. (Value parameters must be typed.) For example:

procedure TakeAnything(const C);

declares a procedure called TakeAnything that accepts a parameter of any type. When you call such a routine, you cannot pass it a numeral or untyped numeric constant.

From: Parameters (Delphi)

So, perhaps add another overloaded version without the const arg that you can call when Size = 0.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜