2011-08-29 11 views
7

何か関数の型なしパラメータに宣言されていない定数としてnilを渡すことは可能ですか? 私はこれらのような関数を持っており、コンパイラを満たすために、Dataパラメータに定数を渡したいと思います。内部的に私はSizeパラメータで決定しています。私は、型指定されていないパラメータの代わりにPointerを使うことができますが、私の場合ははるかに快適です。型なしのパラメータに "nil"定数を渡すにはどうすればよいですか?

今私は、これは動作しますが、私は、変数の宣言を残すことができれば、私は喜んでいるだろう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; 

を取得しています。

function RS232_SendCommand(const Command: Integer): Boolean; overload; 
var 
    Nothing: Pointer; 
begin 
    Result := RS232_SendCommand(Command, Nothing, 0); 
end; 

ソリューションは、このように気にいらを使用することです。

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; 

私のコマンドの中には、コマンド送信後に送信されるデータがあるため、これをやっています。ヘルプ

答えて

12

簡単:

RS232_SendCommand(Command, nil^, 0); 

のDataパラメーターにアクセスしないようにするだけですしかし、おそらくそれは0サイズのパラメータのためです。

私の考えでは、これはアクセスできないものを渡していることを明示しているため、これが最適な解決策です。

+0

うわー、それはさらにスマートです。少なくともこれは不可能だと言われたので、私はこれを答えとして受け入れます。おかげで – TLama

+0

うん、それはエレガントです。 – Kaos

+1

私は 'nil ^'がエレガントなクラスに分類されるかどうかはわかりません! ;-)これは、nilポインタを逆参照しないことを覚えておく必要があります。 –

2

ないため

おかげで、あなたがすることはできません。私は VARCONST、および outパラメータを宣言するときは、型指定を省略することができ

型なしパラメーター

を知っていたことをません。 (valueパラメータを入力する必要があります。) 例えば:

手順TakeAnything(CONST C)。

は、任意の型のパラメータを受け入れ TakeAnythingというプロシージャを宣言しています。そのような ルーチンを呼び出すと、数値または型なし定数に渡すことはできません。

から:Parameters (Delphi)

だから、おそらくあなたが呼び出すことができるのconst引数なしの別のオーバーロードされたバージョンを追加するときのサイズ= 0の

+4

ありがとうございました。これは私を助けました。文から '数値か型なしの数値定数を渡すことはできません。 'という方法を見つけました。空の文字列定数です:Result:= RS232_SendCommand(Command、' '、0); – TLama

+0

:) – Kaos

関連する問題