2011-08-29 14 views
7

nil, bir fonksiyonun türlenmemiş parametresine bildirilmemiş bir sabit olarak geçebilir mi? Bunlar gibi işlevlerim var ve derleyiciyi tatmin etmek için Data parametresine biraz sabit geçmek istiyorum. Dahili olarak Boyut parametresiyle karar veriyorum. İşaretçi parametresi yerine İşaretçiyi kullanabileceğimi biliyorum ancak bu durum benim durumum için çok daha rahat. "nil" sabiti, yazılmamış parametreye nasıl iletilir?

Şimdi bu işleri 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; 

alıyorum ama değişken bildiriminde terk eğer memnun olurdu.

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

Çözüm böyle Somthing kullanmaktır. komutlarıma bazı komut iletimi sonra gönderilen bir veri var çünkü

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; 

ben yapıyorum. yardım

cevap

12

Kolay:

RS232_SendCommand(Command, nil^, 0); 

Veri parametresineiçinden erişmediğinizden emin olmanız yeterlidir., ancak muhtemelen 0 boyut parametresinin değeri budur. çok açıkça size erişilemiyor şey geçiyoruz belirtiyor çünkü Bence

bu en iyi çözümdür.

+0

Vay, bu daha da zeki. Bunu en azından cevap olarak kabul edeceğim çünkü bunun imkansız olduğu belirtildi. Teşekkürler – TLama

+0

Evet, bu zarif. – Kaos

+1

Emin değilim 'nil ^' zarif olarak sınıflandırılabilir! ;-) Sadece bunun nil işaretçisini geçersiz kıldığını hatırlamalısınız. –

2

Hayır için

sayesinde, yapamazsın. Ben Var, const ve dışarı parametreleri bildirirken Sen tip özelliklere atlayabilirsiniz

Yazılmamış Parametreler

biliyordu değil. (Değer parametreleri yazılmalıdır.) Örneğin:

prosedür TakeAnything (const ° C);

herhangi bir tür bir parametre kabul TakeAnything denilen bir işlem açıklamaktadır. Böyle bir 'u bir rutini çağırdığınızda, sayısal veya türlenmemiş bir sayısal sabiti geçemezsiniz.

Gönderen: Parameters (Delphi)

Yani, belki de çağırabilir const arg olmadan başka aşırı versiyonunu eklerken Boyut = 0.

+4

Teşekkürler. Bu bana çok yardımcı oldu.Cümlenin içinden bir sayı ya da yazılmamış sayısal sabiti geçemezsiniz, bir yol buldum, boş bir dize sabiti: 'Sonuç: = RS232_SendCommand (Komut, '', 0);' – TLama

+0

Ah, güzel olan. :) – Kaos

İlgili konular