2011-08-29 14 views
7

क्या कुछ फ़ंक्शन के अवांछित पैरामीटर के लिए एक अविकसित निरंतर के रूप में शून्य को पास करना संभव है? मेरे पास इस तरह के फ़ंक्शन हैं और मैं कंपाइलर को संतुष्ट करने के लिए Data पैरामीटर पर कुछ निरंतर पास करना चाहता हूं। आंतरिक रूप से मैं आकार पैरामीटर द्वारा निर्णय ले रहा हूँ। मुझे पता है कि मैं अनचाहे पैरामीटर के बजाय पॉइंटर का उपयोग कर सकता हूं लेकिन यह मेरे मामले के लिए अधिक आरामदायक है।untyped पैरामीटर के लिए निरंतर "शून्य" कैसे पास करें?

अब मैं 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; 

समाधान इस तरह somthing उपयोग करने के लिए है।

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); 

आपको बस यह सुनिश्चित करने की आवश्यकता है कि आपके अंदर से डेटा पैरामीटर तक नहीं पहुंच पाएंगे, लेकिन अनुमानतः यह है कि 0 आकार पैरामीटर क्या है।

मेरे दिमाग में यह सबसे अच्छा समाधान है क्योंकि यह स्पष्ट रूप से बताता है कि आप कुछ ऐसा कर रहे हैं जिसे एक्सेस नहीं किया जा सकता है।

+0

वाह, यह भी चालाक है। मैं इसे कम से कम उत्तर के रूप में स्वीकार करूंगा क्योंकि उल्लेख किया गया था कि यह असंभव है। धन्यवाद – TLama

+0

हाँ, यह सुरुचिपूर्ण है। – Kaos

+1

मुझे यकीन नहीं है कि 'शून्य ^' को सुरुचिपूर्ण के रूप में वर्गीकृत किया जा सकता है! ;-) आपको बस याद रखना होगा कि यह शून्य पॉइंटर को कम नहीं करता है। –

2

नहीं के लिए धन्यवाद, आप नहीं कर सकते। नहीं है कि मैं

untyped पैरामीटर

की जानता था कि जब वर, स्थिरांक, और बाहर मानकों की घोषणा आप प्रकार विनिर्देशों को छोड़ सकते हैं। (मूल्य मापदंडों टाइप किया जाना चाहिए।) उदाहरण के लिए:

प्रक्रिया TakeAnything (स्थिरांक सी);

एक प्रक्रिया TakeAnything कि किसी भी प्रकार की एक पैरामीटर स्वीकार करता है कहा जाता है की घोषणा की। जब आप को नियमित रूप से कॉल करते हैं, तो आप इसे एक संख्या या untyped संख्यात्मक स्थिरता पास नहीं कर सकते हैं।

से: Parameters (Delphi)

तो, शायद यह है कि आप कॉल कर सकते हैं स्थिरांक आर्ग के बिना किसी अन्य अतिभारित संस्करण जोड़ने जब आकार = 0.

+4

धन्यवाद। इसने मेरी बहुत मदद की।वाक्य से 'आप इसे एक अंक या अनियमित संख्यात्मक निरंतर नहीं पारित कर सकते हैं' मुझे एक रास्ता मिला, एक खाली स्ट्रिंग स्थिर: 'परिणाम: = आरएस 232_SendCommand (कमांड,' ', 0); ' – TLama

+0

आह, अच्छा है। :) – Kaos

संबंधित मुद्दे