c++ - MIDL changes the Interface name -
मेरे पास एक कॉम डीएलएल है, जो कॉम इंटरऑप का प्रयोग करते हुए एनएटी अनुप्रयोगों द्वारा उपयोग किया जाता है। CoClasses में से एक में, वहाँ एक अंतरफलक IT6TrackData कहा जाता है और यह एक TrackData
आईडीएल फ़ाइल से बुलाया संपत्ति प्राप्त होते हैं:
इंटरफ़ेस IT6TrackData {[propget, आईडी ( 1)] HRESULT ट्रैकडेटा ([आउट, रिटावल] सेफ़र्रे (बाइट) * पीवीएल); } जब टीएलबी फ़ाइल को ऊपर आईडीएल फ़ाइल के लिए देखा जाता है, यह संपत्ति को ट्रैकडेटा (कम केस में टी) के रूप में दिखाता है कुछ कारण से क्लाइंट अनुप्रयोग इस गुण को ट्रैकडेटा के रूप में संदर्भ दे रहा था
इंटरफ़ेस IT6TrackData {[propget, id (1)] HRESULT: ट्रैकडेटा ([आउट, रेटवाल] सेफ़र्रे (बाइट) * पीवीएल); [प्रॉपट्यूट, आईडी (1)] हेरेसल्ट ट्रैकडाटा (SAFEARRAY (BYTE) पीवीएल में); }
अब जब टीएलबी फ़ाइल को ऊपर आईडीएल फाइल के लिए देखा जाता है, तो यह संपत्ति को ट्रैकडेटा (टी ऊपरी मामले में) के रूप में दिखाती है, यह पुराना। नेट क्लाइंट को तोड़ रहा है जो "डेटा" के साथ ट्रैकडेटा को देखें निचले मामले में।
मैं इस KB लेख के माध्यम से चले गए
लेकिन कोई रास्ता नहीं है, किसी को भी इस मुद्दे के लिए एक फिक्स के बारे में पता है।
ध्यान की सराहना की जाती है।
आईडीएल फ़ाइल
आयात करें "oaidl.idl"; आयात करें "ocidl.idl"; [वस्तु, UUID (72867CE8-41B6-459E-A258-C7A162A26D5E), दोहरी, nonextensible, helpstring ( "ITFST6TrackData इंटरफेस"), pointer_default (अद्वितीय)] इंटरफ़ेस ITFST6TrackData: IDispatch {[propget, आईडी (1), helpstring ( "संपत्ति ट्रैकडेटा ")] एचआरएसएलएल ट्रैकडेटा ([आउट, रेटवाल] सेफ़ायर (बाइट) * पीवीएल); [प्रॉपट, आईडी (1), हेस्टस्ट्रिंग ("प्रॉपर्टी ट्रैकडाटा")] एचआरएसल्ट ट्रैकडेटा (SAFEARRAY (BYTE) पीवीएल में); }; [UUID (1D7ABC17-2738-4373-9B6B-239E344DBD21), संस्करण (1.0), helpstring ( "SampleCom 1.0 प्रकार लायब्रेरी")] पुस्तकालय SampleComLib {importlib ( "stdole2.tlb"); [UUID (2013CC98-47A7-468F-912A-2A2CAE25E327), helpstring ( "TFST6TrackData कक्षा")] TFST6TrackData {[डिफ़ॉल्ट] इंटरफ़ेस ITFST6TrackData coclass; }; };
यह विंडोज में टाइप पुस्तकालय जनरेटर में एक हैक का साइड-प्रभाव है । एक केस-असंवेदनशील भाषा के कारण मुसीबत के लिए इसका वैकल्पिक समाधान है जो एक आवरण में एक प्रकार की घोषणा कर सकता है, लेकिन इसे किसी अन्य आवरण में कहीं और का उल्लेख कर सकता है। Visual Basic ऐसी भाषा का प्रमुख उदाहरण है।
हैक बहुत कच्चा है, यह पहले पहचानकर्ता के आवरण को लेता है और इसे बाद में किसी भी पहचानकर्ता के आवरण बदलता है मैच के लिए। एक अप्रत्याशित आवरण परिवर्तन का सबसे विशिष्ट कारण एक पैरामीटर का नाम है, आमतौर पर एक लोअर-केस पहले अक्षर के साथ वर्तनी होती है इसलिए आपके पास शायद कोड के पिछले संस्करण में एक "ट्रैकडेटा" विधि पैरामीटर था। और अपने संशोधन में, पहचानकर्ता के क्रम बदल गए या आपने उस पैरामीटर का नाम बदल दिया या हटा दिया। इसके बजाय "TrackData" प्राप्त हो रहा है।
यदि आपके पास मौजूदा क्लाइंट कोड है, तो मूल आवरण पर निर्भर करता है तो आप बहुत कम कर सकते हैं लेकिन अपने स्रोत में आवरण बदल सकते हैं। फगली ठीक है, लेकिन आपके क्लाइंट के लिए असुरक्षित है क्योंकि वे अंतर नहीं बता सकते हैं:)
Comments
Post a Comment