क्या आप एक उदाहरण प्रदान कर सकते हैं कि तुलना के माध्यम से एटीएल का लाभ दिखाता है?लोग COM प्रोग्रामिंग के लिए एटीएल का उपयोग क्यों करते हैं?
उत्तर
डेवलपर्स आलसी हैं और चीजों को पसंद करते हैं जो कठिन हैं, और एटीएल को COM विकास को आसान बनाने के लिए डिज़ाइन किया गया था।
ज्यादातर मामलों में एटीएल COM विकास के कई गन्दा विवरणों की देखभाल करता है, जैसे क्वेरी इंटरफेस प्रबंधन, संदर्भ गिनती और आजीवन प्रबंधन, और COM के सभी विभिन्न थ्रेडिंग मॉडल जो समर्थन करते हैं। यह दोहरी इंटरफेस, कनेक्शन पॉइंट्स, एन्युमेटर आदि जैसे चीजों के लिए अंतर्निहित समर्थन भी प्रदान करता है
यदि आप एटीएल का उपयोग नहीं करते हैं, या ऐसा कुछ, तो आप बहुत अधिक कोड लिखेंगे। यही कारण है कि दुर्भाग्यपूर्ण हो सकता है;)
संपादित करें:
मैं क्योंकि यह ऐसा करने के लिए इतना खराब है एक उदाहरण के लिए ATL के बिना किसी भी COM कोड लिखने, लेकिन इस की जाँच करने के लिए नहीं जा रहा हूँ:
http://www.codeproject.com/KB/COM/simplecomserver.aspx
डाउनलोड कि और फिर simplecomserver परियोजना के तहत निम्न फ़ाइलों को देखो:
registry.cpp
simplecomserverImpl.cpp
(कोड के 700 लाइनों के आसपास)
अब कल्पना है कि उस कुरूपता के सभी लिखने की बजाय, आप CCoComClass से एक वर्ग प्राप्त कर सकता है और सिर्फ नाम विधि को लागू करें, और फिर संभाल करने ऐसा करने कक्षा तत्काल और पंजीकरण:
// Used to determine whether the DLL can be unloaded by OLE
STDAPI DllCanUnloadNow(void)
{
return _AtlModule.DllCanUnloadNow();
}
// Returns a class factory to create an object of the requested type
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
return _AtlModule.DllGetClassObject(rclsid, riid, ppv);
}
// DllRegisterServer - Adds entries to the system registry
STDAPI DllRegisterServer(void)
{
// registers object, typelib and all interfaces in typelib
HRESULT hr = _AtlModule.DllRegisterServer();
return hr;
}
// DllUnregisterServer - Removes entries from the system registry
STDAPI DllUnregisterServer(void)
{
HRESULT hr = _AtlModule.DllUnregisterServer();
return hr;
}
ऐसा लगता है कि आप कुछ ठोस उदाहरण चाहते हैं जहां एटीएल COM प्रोग्रामिंग को सरल बनाता है; निम्नलिखित मेरे लिए क्या हुआ है।
CComObjectRootEx
:CComObjectRootEx
से अपने कॉम कक्षाएं पाने रखकर आप मिल धागा सुरक्षित संदर्भ की गिनती नि: शुल्क।CComCoClass
: इस आधार वर्ग अपनी कक्षा instantiating,IClassFactory
सामान है कि ग्राहकों को अपनी घटक के साथCoGetClassObject
का उपयोग करने के लिए आवश्यक है शामिल करने के लिए सभी तरीकों लागू करता है।COM_INTERFACE_ENTRY
मैक्रो: ATLBEGIN_COM_MAP
औरEND_COM_MAP
के बीच का उपयोग करने के, जो आप अपनी आवश्यकताओं को, जो कुछ भी वे हो सकता है के लिए सही ढंग सेIUnknown::QueryInterface
की हिम्मत लागू करने के लिए उपयोग कर सकते हैं मैक्रो की एक पूरी गुच्छा प्रदान करता है।IDispatchImpl
: यदि आप अपने घटकों को स्क्रिप्ट के लिए सुलभ बनाना चाहते हैं, तो आपकोIDispatch
लागू करना होगा। एटीएलIDispatchImpl
कक्षा प्रदान करता है, जो इसे स्वयं लागू करने की परेशानी बचाता है।CComPtr
/CComQIPtr
: ATL इन स्मार्ट सूचक कक्षाएं, जोIUnknown::AddRef
,IUnknown::Release
औरIUnknown::QueryInterface
के लिए कॉल को संपुटित प्रदान करता है।उनका उपयोग करने से आपका कोड पढ़ने में आसान हो जाएगा और COM संदर्भ-गिनती बग के लिए कम प्रवण होगा।CComBSTR
/CComVariant
: ATL इन कक्षाओं में है, जोBSTR
औरVARIANT
कॉम प्रकार से निपटने की जटिलता को कम करती है।
- 1. एटीएल का उपयोग कर गणना COM COM (IDISpatch) विधियां?
- 2. पर्थ्रेड: लोग pthread_exit का उपयोग क्यों परेशान करते हैं?
- 3. लोग <CFLOGIN> का उपयोग क्यों नहीं करते हैं?
- 4. लोग कक्षा लोडिंग का उपयोग किसके लिए करते हैं?
- 5. लोग सेटिंग फ़ाइलों का उपयोग करने के बजाय ऐपकॉन्फिग का उपयोग क्यों करते हैं? (.NET)
- 6. लोग बुनियादी परिचालनों के लिए jQuery का उपयोग क्यों करते हैं?
- 7. हम प्रोग्रामिंग में रेडियंस का उपयोग क्यों करते हैं?
- 8. लोग क्लाउडइनिट का उपयोग करने के बजाय अमेज़ॅन क्लाउड फॉर्मेशन के साथ कठपुतली/शेफ का उपयोग क्यों करते हैं?
- 9. Google और अन्य लोग किस भाषा का उपयोग करते हैं
- 10. क्यों कुछ लोग गणित सदस्य के रूप में "कोई नहीं" का उपयोग करते हैं?
- 11. लोग i ++ के बजाय i = i + 1 का उपयोग क्यों करते हैं?
- 12. क्यों सभी लोग ViewData से नफरत करते हैं?
- 13. लोग कई jQuery प्लगइन में $ = $ (यह) क्यों असाइन करते हैं?
- 14. सभी लोग अनचाहे नेमस्पेस घोषणाओं का उपयोग क्यों करते हैं (यानी std :: not :: std: :)?
- 15. कुछ लोग पत्राचार में Class.method की बजाय कक्षा # विधि का उपयोग क्यों करते हैं?
- 16. COM का उपयोग कर एक सरणी पास कर रहे हैं?
- 17. लोग कुछ * जैसे char * और buf का उपयोग क्यों करते हैं?
- 18. COM (सी ++) प्रोग्रामिंग ट्यूटोरियल?
- 19. बेस क्लास से प्राप्त एटीएल COM क्लास कैसे बनाएं?
- 20. क्यों कई लोग कॉलम उन्मुख डेटाबेस के रूप में कैसंद्रा का उल्लेख करते हैं?
- 21. हम serialization का उपयोग क्यों करते हैं?
- 22. प्रोग्रामिंग में स्थिरांक का उपयोग क्यों करें?
- 23. आप अभी भी PHP का उपयोग क्यों करते हैं?
- 24. लोग लॉगिंग करते समय लोगों को कैप्चर करते हैं - log4net
- 25. लोग जेसीई प्रदाता में जावा के निर्माण के बजाय बाउंसीकैसल का उपयोग क्यों करते हैं? अंतर क्या है?
- 26. क्या अधिकांश लोग .NET के SqlMembershipProvider, SqlRoleProvider, और SqlProfileProvider का उपयोग करते हैं?
- 27. प्रोग्रामिंग का उपयोग करते हुए प्रोग्रार्ड
- 28. लोग अपने कोड में शून्य के बजाय जादू मूल्यों का उपयोग क्यों कर रहे हैं?
- 29. लोग आरडीबीएम पर शुद्ध एक्सएमएल डेटाबेस का उपयोग क्यों करेंगे?
- 30. हास्केल में सामान्य प्रोग्रामिंग कैसे करते हैं?
किसके साथ तुलना? – Johnsyweb
एटीएल का उपयोग नहीं करने के लिए। – wamp