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;