2008-10-28 23 views
5

डेल्फी 200 ई 2283 त्रुटि के साथ शिकायत करता है: [डीसीसी त्रुटि] outputcode.pas (466): ई 2283 बहुत सारे स्थानीय स्थिरांक। छोटी प्रक्रियाओं का उपयोग करेंमुझे "बहुत सारे स्थानीय स्थिरांक" त्रुटि क्यों मिलती है?

डेल्फी 2007 बस ठीक है। मुझे स्थानीय स्थिरांक की बहुतायत नहीं मिल रही है, यह एक छोटी (500 लाइन) इकाई है। क्या आप कॉन्स्टेंट या शाब्दिकों की कोई बहुतायत देखते हैं जिन्हें मैं संबोधित कर सकता हूं?

procedure TOutputCodeForm.FormCreate(Sender: TObject); 
var 
    poParser : TStringStream; 
begin 

    if (IsWindowsVista()) then 
    begin 
     SetVistaFonts(self); 
    end; 

    poParser := TStringStream.Create(gstrSQLParser); 

    SQLParser := TSyntaxMemoParser.Create(self); 
    SQLParser.RegistryKey := '\Software\Advantage Data Architect\SQLSyntaxMemo'; 
    SQLParser.UseRegistry := True; 
    SQLParser.CompileFromStream(poParser); 

    FreeAndNil(poParser); 
    poParser := TStringStream.Create(gstrCPPParser); 



    cppParser := TSyntaxMemoParser.Create(self); 
    cppParser.RegistryKey := '\Software\Advantage Data Architect\SQLSyntaxMemo'; 
    cppParser.UseRegistry := True; 
    cppParser.CompileFromStream(poParser); 

    FreeAndNil(poParser); 
    poParser := TStringStream.Create(gstrPasParser); 

    pasParser := TSyntaxMemoParser.Create(self); 
    pasParser.RegistryKey := '\Software\Advantage Data Architect\SQLSyntaxMemo'; 
    pasParser.Script := ExtractFilePath(Application.ExeName) + 'pasScript.txt'; 
    pasParser.CompileFromStream(poParser); 

    {* Free the stream since we are finished with it. *} 
    FreeAndNil(poParser); 

    poCodeOutput := TSyntaxMemo.Create(self); 
    poCodeOutput.Parent := Panel1; 
    poCodeOutput.Left := 8; 
    poCodeOutput.Top := 8; 
    poCodeOutput.Width := Panel1.Width - 16; 
    poCodeOutput.Height := Panel1.Height - 16; 
    poCodeOutput.ClipCopyFormats := [smTEXT, smRTF]; 
    poCodeOutput.Font.Charset := ANSI_CHARSET; 
    poCodeOutput.Font.Color := clWindowText; 
    poCodeOutput.Font.Height := -11; 
    poCodeOutput.Font.Name := 'Courier New'; 
    poCodeOutput.Font.Style := []; 
    poCodeOutput.GutterFont.Charset := DEFAULT_CHARSET; 
    poCodeOutput.GutterFont.Color := clWindowText; 
    poCodeOutput.GutterFont.Height := -11; 
    poCodeOutput.GutterFont.Name := 'MS Sans Serif'; 
    poCodeOutput.GutterFont.Style := []; 
    poCodeOutput.HyperCursor := crDefault; 
    poCodeOutput.IndentStep := 1; 
    poCodeOutput.Margin := 2; 
    poCodeOutput.Modified := False; 
    poCodeOutput.MonoPrint := True; 
    poCodeOutput.Options := [smoSyntaxHighlight, smoPrintWrap, smoPrintLineNos, smoPrintFilename, smoPrintDate, smoPrintPageNos, smoAutoIndent, smoTabToColumn, smoWordSelect, smoShowRMargin, smoShowGutter, smoShowWrapColumn, smoTitleAsFilename, smoProcessDroppedFiles, smoBlockOverwriteCursor, smoShowWrapGlyph, smoColumnTrack, smoUseTAB, smoSmartFill, smoOLEDragSource]; 
    poCodeOutput.ReadOnly := False; 
    poCodeOutput.RightMargin := 80; 
    poCodeOutput.SaveFormat := sfTEXT; 
    poCodeOutput.ScrollBars := ssBoth; 
    poCodeOutput.SelLineStyle := lsCRLF; 
    poCodeOutput.SelStart := 3; 
    poCodeOutput.SelLength := 0; 
    poCodeOutput.SelTextColor := clWhite; 
    poCodeOutput.SelTextBack := clBlack; 
    poCodeOutput.TabDefault := 4; 
    poCodeOutput.TabOrder := 0; 
    poCodeOutput.VisiblePropEdPages := [ppOPTIONS, ppHIGHLIGHTING, ppKEYS, ppAUTOCORRECT, ppTEMPLATES]; 
    poCodeOutput.WrapAtColumn := 0; 
    poCodeOutput.OnKeyDown := FormKeyDown; 
    poCodeOutput.ActiveParser := 3; 
    poCodeOutput.Anchors := [akLeft, akTop, akRight, akBottom]; 
    poCodeOutput.Parser1 := pasParser; 
    poCodeOutput.Parser2 := cppParser; 
    poCodeOutput.Parser3 := SQLParser; 

    SQLParser.AttachEditor(poCodeOutput); 
    cppParser.AttachEditor(poCodeOutput); 
    pasParser.AttachEditor(poCodeOutput); 

    poCodeOutput.Lines.AddStrings(poCode); 

    if (CodeType = ctCPP) then 
     poCodeOutput.ActiveParser := 2 
    else if (CodeType = ctPascal) then 
     poCodeOutput.ActiveParser := 1 
    else 
     poCodeOutput.ActiveParser := 3; 

    MainForm.AdjustFormSize(self, 0.95, 0.75); 
end; 
+1

मुझे समस्या मिली। GstrCPPParser का संदर्भ। वह वैश्विक स्ट्रिंग एक स्ट्रिंग का राक्षस है। –

+0

और मेमोरी वार, स्ट्रिंग्स को डेल्फी 200 के साथ दो गुना बड़ा मिला है (: यह कितना बड़ा था? –

उत्तर

3

क्या Win32 परिभाषित है, क्या स्थिरांक सभी शामिल इकाइयों से हो सकता है।

मैं एक द्विआधारी खोज करना होगा: जब तक यह संकलित फाड़ बाहर रखने के आधा इकाई, और पुन: सामान जोड़ने

हाँ, यह बेकार है, लेकिन वह BorlandCodeGaembarcadero के आंतरिक संकलक त्रुटियों डिबग करने के लिए कोशिश कर रहा है की विशेषताओं में से एक है।।

0

मुझे विधि मिली है (फॉर्मक्रेट) जो समस्या है और रिफैक्टरिंग कर रही है, लेकिन इससे कोई फर्क नहीं पड़ता कि मैं संकलक को कितनी छोटी बना देता हूं जब तक कि मैं कुछ कोड हटा नहीं देता।

फ्रैंकोइस धन्यवाद, लेकिन मैंने कोड को दोबारा प्रतिक्रिया दी और अभी भी त्रुटि प्राप्त हुई। यदि यह डी 2007 के साथ बनाया गया है, और डी 200 9 के साथ नहीं है, तो यह मेरे लिए फिश लगता है।

procedure TOutputCodeForm.FormCreate(Sender: TObject); 
begin 

    if (IsWindowsVista()) then 
    begin 
     SetVistaFonts(self); 
    end; 

    SetupParser(SQLParser, gstrSQLParser, ''); 
    // unresolved jmu - have to comment this out for now or delphi will complain 
    // that there are too many literals in this file. Seems like a delphi bug 
    // since this builds in older versions, and I've already refactored it. 
    //SetupParser(cppParser, gstrCPPParser, ''); 
    SetupParser(pasParser, gstrPasParser, ExtractFilePath(Application.ExeName) + 'pasScript.txt'); 
    SetupCodeOutput(poCodeOutput); 

    SQLParser.AttachEditor(poCodeOutput); 
    cppParser.AttachEditor(poCodeOutput); 
    pasParser.AttachEditor(poCodeOutput); 

    poCodeOutput.Lines.AddStrings(poCode); 

    if (CodeType = ctCPP) then 
     poCodeOutput.ActiveParser := 2 
    else if (CodeType = ctPascal) then 
     poCodeOutput.ActiveParser := 1 
    else 
     poCodeOutput.ActiveParser := 3; 

    MainForm.AdjustFormSize(self, 0.95, 0.75); 
end; 
+0

समस्या दूर होने तक काटते रहें। –

+0

मैंने अपनी समस्याओं को भी देखा है (कभी भी आपके पास त्रुटि नहीं है) निश्चित रूप से शामिल करने से उत्पन्न यूएसई स्टेटमेंट्स। यदि आपके पास कोई कोड नहीं छोड़ा गया है, तो यूएसईएस स्टैम को दूर करना शुरू करें। –

+0

त्रुटि के लिए आपको किस कोड को हटाना है? यह इस मुद्दे का संकेत हो सकता है। –

3

यह एक संकलक बग है दावा करते हुए या मदद के लिए पूछ से पहले, मैं गंभीरता से संगठित करने और मेरी कोड साफ करने के लिए कोशिश करेंगे।

मैं आपके इस बड़े बैग के बजाय फॉर्मक्रेट में प्रत्येक भाग के लिए समर्पित दिनचर्या तैयार करूंगा। - SQLParseInit
- cppParseInit
- pasParseInit
- CodeOutPutInit < - +++++ एक वहाँ स्थिरांक

और विशेष रूप से अगर 1 देखें की बहुत समस्या उत्पन्न कर रहा है।

और कुछ तीसरे पक्ष निर्भरताओं के साथ, कम से कम मामला बनाने के लिए बुरा नहीं होगा, ताकि दूसरों को इसे पुन: उत्पन्न करने की अनुमति मिल सके, और देखें कि यह वास्तव में एक बग या सिर्फ खराब कोड है या नहीं।
और उन $ IFDEF को भी हटाएं ... बस वास्तविक कोड प्रदान करें जो इस व्यवहार को सभी अव्यवस्था के बिना कारण बनता है।

जोड़ा गया: जैसा कि यह डी 2007 में काम करता है, लेकिन डी 200 9 में नहीं, मैं यह भी दोगुना कर दूंगा कि आपके कोड में शामिल सभी पुस्तकालयों/तृतीय पक्ष घटकों को सही ढंग से D2009 में माइग्रेट किया गया है। (उस cppParser को ड्रिल करें)

0

समस्या को देखते हुए केवल आपके डेल्फी कंपाइलर्स/सेटअप में से एक में हो रहा है, मुझे लगता है कि यह किसी घटक स्थापना समस्या से संबंधित है या नहीं। क्या आपने केवल एक मूल रूप बनाने का प्रयास किया है जो आपके द्वारा गतिशील रूप से बनाए जा रहे सभी घटकों के स्थिर संस्करणों का उपयोग करता है? (TSyntaxMemoParser, आदि)।

(आप अलग मशीनों पर उन डेल्फी संस्करण चला रहे/VM के btw अगर आप कई तीसरे पक्ष के घटकों और डेल्फी के एक से अधिक संस्करण का उपयोग परेशानी से बचा जा सकता है?)

0

मदद से:

One or more of your procedures contain so many string constant expressions that they exceed the compiler's internal storage limit. This can occur in code that is automatically generated. To fix this, you can shorten your procedures or declare contant identifiers instead of using so many literals in the code.

तो शायद उन तारों में से कुछ को कोनों या अन्य चर (गैर स्थानीय) में डालने का प्रयास करें।

0

मैं "poCodeOutput.Options: = [xx ....]" की रेखा को देखता हूं, कोड की एक पंक्ति पर सेट में बहुत से विकल्प की तरह दिखता है।

उस लाइन को बाहर निकालें और देखें कि आपको त्रुटि मिलती है या नहीं।

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