2013-02-07 31 views
9

Application उदाहरण कहां और कब बनाया गया है? (Screen उदाहरण के लिए ही चला जाता है)।कहां और कब आवेदन (टीएप्लिकेशन) उदाहरण बनाया गया है?

मुझे Forms या Systeminitialization अनुभाग में कुछ भी दिखाई नहीं देता है। जो _StartExe (सिस्टम) की ओर जाता है और asm कोड की एक पूरी बहुत कुछ - - कौन Application उदाहरण जहाँ तक मैं बता सकता पैदा नहीं करता
सीपीयू खिड़कियों में Application.Initialize से पहले, मैं @_InitExe (SysInit) के लिए एक कॉल देखते हैं।

मुझे यहां क्या याद आ रही है?

उत्तर

12

यह बहुत आसान इस कोड से बाहर काम करने के लिए है। आप बस TApplication.Create के लिए एक टेक्स्ट खोज करते हैं। उदाहरण के लिए आईडीई की फाइलों में खोजें सुविधा का उपयोग करना।

लेकिन आप हमेशा आलसी हो सकता है और डिबगर यह करने के लिए मिल सकता है।

  1. डीबग DCUs सक्षम करें।
  2. TApplication.Create में एक ब्रेकपाइंट सेट करें।
  3. रन।

जब प्रोग्राम टूट जाता है, तो कॉल स्टैक देखें। आप देखेंगे कि TApplication ऑब्जेक्ट को InitControls से Controls इकाई में तुरंत चालू किया गया है। और InitControls को इकाई के initialization सेक्शन कहा जाता है।

एक सादे वेनिला VCL अनुप्रयोग के लिए पूर्ण कॉल स्टैक इस तरह दिखता है:

 
Vcl.Forms.TApplication.Create(nil) 
Vcl.Controls.InitControls 
Vcl.Controls.Vcl.Controls 
System.InitUnits 
System._StartExe(???,???) 
SysInit._InitExe($5A81BC) 
Project1.Project1 
:749933aa kernel32.BaseThreadInitThunk + 0x12 
:76f09ef2 ntdll.RtlInitializeExceptionChain + 0x63 
:76f09ec5 ntdll.RtlInitializeExceptionChain + 0x36 

TScreen.Create साथ एक ही बात कर रहा है, तो आप उस TScreen वस्तु भी InitControls() में instantiated है देखेंगे।

मैं कोशिश करते हैं और इस सब की व्याख्या नहीं होगा। मुझे लगता है कि यहां से सब कुछ करने के लिए यहां पर्याप्त जानकारी और सलाह है। हालांकि यह XE3 एप्लिकेशन से कॉल स्टैक है, यह आपके डेल्फी 5 एप्लिकेशन के लिए समान दिखाई देगा।

+3

बनाता है मुझे आश्चर्य है कि क्यों आवेदन पहली जगह में फार्म इकाई में घोषित किया जाता है (नियंत्रण फार्म का उपयोग करता है, प्रपत्र नियंत्रण का उपयोग करता है) .. – kobik

+0

नियंत्रण केवल कार्यान्वयन में फॉर्म का उपयोग करता है। TFplication को TForm से अधिक घोषित किया जाना है क्योंकि यह अपने इंटरफ़ेस अनुभाग में TForm को संदर्भित करता है। –

10

आवेदन उदाहरण Vcl.Controls.pas इकाई के InitControls प्रक्रिया में बनाया जाता है।

procedure InitControls; 
begin 
... 
    Application := TApplication.Create(nil); 
... 

InitControls एक ही इकाई के प्रारंभ खंड में कहा जाता है:

initialization 
  ... 
  InitControls;