2009-07-22 16 views
5

मैं एक विंडोज सेवा विकसित करना शुरू कर रहा हूं। मैं अपने आप से कुछ कक्षाओं का उपयोग करना चाहता हूं, जिनमें कुछ एमएफसी कक्षाओं जैसे सीएसटींग, सीएसओकेट, कैरचिव, सीएममफाइल और कोबजेक्ट की छोटी निर्भरताएं हैं। MSDN का कहना है कि आपको Windows सेवा में उपयोग किए जाने वाले एमएफसी के कौन से टुकड़े इस बारे में बहुत सावधान रहने की आवश्यकता है, लेकिन यह निर्दिष्ट नहीं करता है और होने वाली समस्याओं का वर्णन नहीं करता है।विंडोज सेवा में एमएफसी का उपयोग करना?

मेरे प्रश्न हैं:

  • MFC किस टुकड़े इस्तेमाल किया जा सकता?
  • एमएफसी का उपयोग करके मुझे क्या समस्याएं मिल सकती हैं?
  • एमएफसी उपयोग के लिए विंडोज सेवा के कौन से हिस्से महत्वपूर्ण हैं?
  • क्या यह विंडोज सेवा के लिए एमएफसी के बजाय एटीएल का उपयोग करने की सलाह दी जाती है?

उत्तर

4

मुझे यकीन नहीं है कि तेह एमएसडीएन आलेख में उनका क्या अर्थ है। जब तक आप किसी भी जीयूआई कार्यक्षमता का उपयोग नहीं करते हैं, तो आप ठीक होंगे - लेकिन सेवाओं के विकास के दौरान यह एक सामान्य डिजाइन मुद्दा है।

कहा जा रहा है कि, एटीएल की कार्यक्षमता विशेष रूप से आईआईआरसी सेवाओं के निर्माण के लिए डिज़ाइन की गई है ताकि आप इसका उपयोग बंद कर सकें।

(मेरी जानकारी के लिए) आपके सवालों के जवाब के लिए:

1) लोगों को आपके द्वारा निर्दिष्ट कोई समस्या नहीं है।

2) मुझे लगता है कि उनका मतलब यूआई घटकों के साथ सिंक्रनाइज़ेशन समस्या है। जब तक आप किसी भी सीडब्ल्यूएनडी-व्युत्पन्न कक्षाओं का उपयोग नहीं करते हैं, तब तक आप ठीक होंगे।

3) प्रश्न को समझ में नहीं आता है।

4) पहले देखें, साथ ही एटीएल अधिक हल्का वजन है इसलिए आपको कम वितरण करना होगा, और बिल्ड-इन कार्यक्षमता प्रदान करना होगा जो सेवा को विकसित करने के लिए दर्द से कम कर देगा। उदाहरण देखें CAtlServiceModuleT। आप अभी भी अपने स्वयं के वर्गों का उपयोग करने में सक्षम होंगे, क्योंकि आजकल एमएफसी और एटीएल के बीच सीएसटींग साझा किया जाता है और एटीएल में सॉकेट प्रोग्रामिंग और मेमोरी फ़ाइल मैपिंग के लिए कक्षाएं होती हैं। यह कैरचिव के बराबर नहीं है, और मुझे यकीन नहीं है कि आप कोबजेक्ट में किस कार्यक्षमता का उपयोग करते हैं, इसलिए मैं यह नहीं कह सकता कि एटीएल में समकक्ष है या नहीं। तो निष्कर्ष निकालने के लिए, मैं इस सवाल के लिए 'हाँ' कहूंगा।

3

(मैं जानता हूँ कि क्या यह उत्तर थोड़ी देर हो चुकी है और इस सवाल पहले से ही उत्तर था, लेकिन सेवाओं में MFC मेरे लिए एक पीड़ादायक स्थान है ...)

CSockets, मुझे याद है जहाँ तक, एक खिड़की की आवश्यकता होती है। यह पृष्ठभूमि में एक अदृश्य बनाता है। मैंने यह कठिन तरीका पाया जब मैंने कोशिश की कि कुछ पूर्व-एक्सिसिटिंग एमएफसी कोड विंडोज़ सेवा में शामिल हों। शायद यह केवल तभी जरूरी था जब आपने सॉकेट कनेक्शन स्वीकार किया - मुझे याद नहीं है? लेकिन यह काम नहीं किया! (इस सीमा को महसूस करने के लिए मैं कितना समय बर्बाद कर रहा हूं यह एक लंबी कहानी है)

CObject? यदि आपको रनटाइम क्लास आईडी सामानों का उपयोग आरटीटीआई (गतिशील_कास्ट, आदि ...)

सीएसटींग, मुझे सीएसटींग पसंद है, मुझे पता है कि यह अब एटीएल के साथ साझा किया गया है, यह सुनिश्चित नहीं है कि आप इसे एमएफसी या एटीएल में खींचें ... आप std :: स्ट्रिंग का उपयोग कर सकते हैं। साथ ही, मुझे याद है कि किसी ने व्युत्पन्न std :: स्ट्रिंग बनाई है जो CSTring के समान तरीके प्रदान करता है। (संपादित करें: code - आदमी !! यह अतीत से एक विस्फोट है ...)

कैरचिव, सीएमएमफ़ाइल: क्या आपको वास्तव में इनकी आवश्यकता है?

वैसे भी, जैसा कि रोएल ने कहा था, एटीएल अधिक सहायक हो सकता है। मैं सर्वर-साइड एप्लिकेशन (कभी भी!) एटीएल में एमएफसी का उपयोग नहीं करता? शायद। अगर मुझे COM की आवश्यकता है, तो बदनाम रूप से। कोई COM नहीं, लेकिन CAtlServiceModuleT, आदि के लिए ... शायद ....

+0

अपना अनुभव साझा करने के लिए धन्यवाद! – mem64k

+1

मैंने पाया कि डाउनलोड लिंक सीएसटींग प्रतिस्थापन के लिए काम नहीं करता है, लेकिन कोडप्रोजेक्ट http://www.codeproject.com/KB/string/stdstring.aspx –

+0

धन्यवाद जीएच पर एक ही चीज़ (मुझे लगता है) मिला है! आपका लिंक एक ही कक्षा है ("स्टड" स्ट्रिंग) मैं भी संदर्भ दे रहा था! - मैं अपने जवाब में लिंक अपडेट करूंगा। मुझे पता है कि यह वही प्रोजेक्ट है क्योंकि मुझे स्रोत में यह टिप्पणी याद है: "कृपया मुझे दोष न दें अगर यह कक्षा में 30 बिलियन डॉलर का उपग्रह विस्फोट हो जाता है।" – Aardvark

0

और एमएफसी के बारे में एक और बुरी बात यह है कि मैंने नियमित एमएफसी-एटीएल ऐप को सेवा में बदलने की कोशिश करते समय अनुभव किया है: AfxConnectionAdvise का उपयोग() वास्तव में खिड़की की प्रक्रिया के बिना बेकार है। मेरी सेवा में धागे सिर्फ नियमित संदेश न पंपिंग थ्रेड हैं। मेरा मानना ​​है कि यही कारण है कि मैंने कभी भी एक अन्य COM सर्वर से विकसित घटनाएं नहीं की हैं जिन्हें मैंने विकसित किया है। वह अन्य COM सर्वर Fire_xxxEvent() पर लटकता है, जिससे पूरे सिस्टम में एक बड़ी गड़बड़ी होती है।

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