function - "पहचानकर्ता की उम्मीद" या "अवैध प्रोटोटाइप" जब इनो सेटअप में एक स्क्रिप्टेड स्थिरांक लागू करते हैं
syntax inno-setup (1)
तो इस फ़ंक्शन को देखते हुए, मुझे
GetRoot := ROOTPage.Values[0];
पर "आइडेंटिफायर एक्सपेक्टेड" त्रुटि
GetRoot := ROOTPage.Values[0];
लाइन।
मुझे उम्मीद है कि यह मुझे बता रहा है कि
ROOTPage
परिभाषित नहीं है?
const
DefaultRoot = 'C:\IAmGRoot';
Var
ROOTPage : TInputQueryWizardPage;
procedure SetupRoot;
begin
ROOTPage := CreateInputQueryPage(wpUserInfo,
ExpandConstant('{cm:RootTitle}'),
ExpandConstant('{cm:RootInstructions}'),
ExpandConstant('{cm:RootDescription}') + ' "' + DefaultRoot + '"'
);
ROOTPage.Add(ExpandConstant('{cm:SSRoot}') + ':', False);
ROOTPage.Values[0] := ExpandConstant('{DefaultRoot}');
// add SSROOT to path
end;
function GetRoot : string;
begin
GetRoot := ROOTPage.Values[0];
end;
मुझे इस त्रुटि की व्याख्या कैसे करनी चाहिए। पास्कल में एक पहचानकर्ता क्या है?
यह
page
मुझे बताता है कि पहचानकर्ता चर नाम हैं।
शायद मुझे किसी तरह से
ROOTPage.Values[0]
का विस्तार करने की आवश्यकता है क्योंकि मैं एक इनोवा सेटअप ऑब्जेक्ट से एक सरणी का संदर्भ दे रहा हूं?
या हो सकता है कि मुझे अलग तरीके से मान लौटाना पड़े। मैंने पास्कल पर एक पेज देखा जिसमें कहा गया था कि आपको पुनरावर्ती लूप से बचने के लिए पैरामीटर कम फ़ंक्शन पर फ़ंक्शन मान को असाइन करने से बचने की आवश्यकता है। क्या इसका मतलब है कि मुझे एक डमी मूल्य में पास होना चाहिए? या वहाँ एक अलग वाक्यविन्यास है? उस पेज ने नहीं समझाया।
मैं चुपके से सोचता हूं कि मेरा असली मुद्दा यह है कि मैं अपने कार्य को सही ढंग से परिभाषित नहीं कर रहा हूं ... लेकिन अच्छी तरह से। यह बहुत कम से कम संकलन करता है। यह सवाल बन सकता है: आप पास्कल में एक पैरामीटर-कम फ़ंक्शन को कैसे संभालते हैं?
मुझे नहीं लगता कि इनो सेटअप समस्या का हिस्सा है, लेकिन मैं उस मामले में इनो सेटअप के साथ काम कर रहा हूं जो महत्वपूर्ण है।
अद्यतन: यह सरणी नहीं लगती क्योंकि यह एक ही त्रुटि मिलती है:
const
DefaultRoot = 'C:\IAmGRoot';
function GetRoot : string;
begin
GetRoot := DefaultRoot;
end;
अद्यतन: इस link ने कहा है कि फ़ंक्शन नाम को प्रतिस्थापित किया जा सकता है / इसे प्रमुख शब्द के साथ बदला जाना चाहिए जैसे कि निम्न कोड। मैं वास्तव में यह जानता था, लेकिन इनो सेटअप कंपाइलर इसे वैध सिंटैक्स के रूप में नहीं पहचानता है। यह तब बताता है कि मेरा कार्य एक अमान्य प्रोटोटाइप है।
function GetRoot : string;
begin
Result := DefaultRoot;
end;
अद्यतन: अगर मैं ऐसा करता हूं तो मुझे "GetRoot के लिए अमान्य प्रोटोटाइप" मिलता है
function GetRoot : boolean;
begin
Result := False;
end;
@Martin Prikryl के लिए अपडेट करें :
वैसे मैं इसे कुछ स्थानों पर उपयोग करता हूं लेकिन विशिष्ट उपयोग इस तरह होगा:
[Files]
Source: "C:\ValidPath\Release\*"; DestDir: "{app}\bin"; Components: DefinedComponent
Source: "C:\ValidPath\Deployment\*"; DestDir: "{code:GetRoot}\"; Flags: ignoreversion recursesubdirs; Components: DefinedComponent
पहचानकर्ता की उम्मीद
आपका कोड पास्कल में सही होगा, लेकिन यह पास्कल स्क्रिप्ट में संकलित नहीं है।
पास्कल में, जब आप किसी फ़ंक्शन का रिटर्न वैल्यू असाइन करना चाहते हैं, तो आप फ़ंक्शन के नाम के साथ या "
Result
" वेरिएबल को वैल्यू असाइन करते हैं।
तो यह सही है:
function GetRoot: string;
begin
GetRoot := ROOTPage.Values[0];
end;
और यह भी (दोनों बराबर हैं):
function GetRoot: string;
begin
Result := ROOTPage.Values[0];
end;
पास्कल स्क्रिप्ट में, केवल
Result
काम करता है।
जब आप फ़ंक्शन के नाम का उपयोग करते हैं, तो आपको
"पहचानकर्ता अपेक्षित"
मिलता
है।
अमान्य प्रोटोटाइप
यह आपको तब मिलता है जब फ़ंक्शन को
Code
सेक्शन के बहिष्कार से बुलाया जाता है और एक विशिष्ट पैरामीटर सूची / रिटर्न वैल्यू की आवश्यकता होती है।
लेकिन आपने हमें यह नहीं बताया कि आप
GetRoot
फ़ंक्शन का उपयोग किस लिए करते हैं।
दो जगह हैं, जहां आप इनो सेटअप में एक कस्टम फ़ंक्शन का उपयोग कर सकते हैं:
-
पैरामीटर की
Check
: इसके लिए फ़ंक्शन को एकBoolean
वापस करना चाहिए और या तो कोई पैरामीटर या एक पैरामीटर नहीं लेना चाहिए (पैरामीटर प्रकारCheck
पैरामीटर में आपके द्वारा प्रदान किए गए मूल्य से निर्धारित होता है)।function MyProgCheck(): Boolean; function MyDirCheck(DirName: String): Boolean;
-
स्क्रिप्टेड कॉन्स्टेंट : फ़ंक्शन को एक
string
लौटना चाहिए और एकstring
पैरामीटर लेना चाहिए, भले ही कोई पैरामीटर स्क्रिप्टेड स्थिरांक में प्रदान नहीं किया गया हो। मुझे लगता है कि यह आपके उपयोग का मामला है। यदि आपको किसी पैरामीटर की आवश्यकता नहीं है, तो इसे घोषित करें, लेकिन इसका उपयोग न करें:function GetRoot(Param: String): string; begin Result := ROOTPage.Values[0]; end;