हमारी परियोजना में हम अपने एएसपीनेट एप्लिकेशन में COM के माध्यम से बहुत सारे डेल्फी कोड का पुन: उपयोग कर रहे हैं।.NET में पी/Invoke पर COM इंटरऑप क्यों पसंद किया जाता है?
इस तरह: विरासत डेल्फी dll => डेल्फी COM आवरण => नेट इंटरॉप => asp.net (MVC)
हम पहुँच उल्लंघन, dll के की उतराई, आदि के बारे में कुछ मुद्दों है ... मेरे पास है अब पी/Invoke कोड के माध्यम से सीधे विरासत डीएलएल का उपयोग करने के लिए कुछ पोर्ट किया।
जब मैं COM और P/Invoke से संबंधित संसाधनों को देखता हूं, तो लोग लगभग हमेशा COM का उपयोग करने की सलाह देते हैं। ऐसा क्यों है? क्या नहीं पी/आह्वान निम्नलिखित फायदे हैं:
- चेक आउट कोड हमेशा पिछले पंजीकृत कॉम के बजाय सही dll का उपयोग करेगा
- एकाधिक संस्करण (उदाहरण के लिए सर्वर पर कंधे से कंधा मिलाकर चला सकते हैं : देव, परीक्षण और गुणवत्ता आश्वासन)
- कोई और अधिक COM पंजीकरण परेशानी
- कॉम संचार (लेख मैं एक 30% की गति में वृद्धि से संकेत मिलता है पढ़ने के लिए) की तुलना में बहुत तेजी से
क्या आप 64 बिट प्रक्रिया से 32 बिट डीएल में पी/इनवॉक कर सकते हैं? मुझे ऐसा नहीं लगता। – Bond
क्या आप कुछ संदर्भ दे सकते हैं जो सुझाव देते हैं कि COM को P/Invoke को प्राथमिकता दी जाती है? मैं आपसे बहुत सहमत हूं कि पी/Invoke उपलब्ध बेहतर समाधान है। .NET बीसीएल में अधिकांश इंटर्न पी/Invoke Win32 एपीआई के संदर्भ में लागू किया गया है। COM इंटरऑप का उपयोग करने का केवल एक कारण है जहां आपके पास कोई विकल्प नहीं है, उदा। Office अनुप्रयोगों, या Windows API भागों के साथ इंटरऑप करें जो केवल COM हैं। – Govert
डीएलएल नरक याद रखें? सही डीएलएल का उपयोग करने के बजाय, आपका कोड उसी नाम के साथ पहले उपलब्ध डीएलएल का उपयोग करेगा। किसी भी एपीआई परिवर्तन रनटाइम तक नहीं पहचाना जाएगा, जिसका मतलब है कि संस्करण सभी असंभव है। आप एक डीएलएल नहीं बना सकते हैं जो पुराने और नए ग्राहकों दोनों को कार्यों के नाम बदलने के बिना –