2011-04-20 9 views
6

मैं एक COM सर्वर निष्पादन योग्य बना रहा हूं, और कक्षा पंजीकरण के साथ किसी समस्या का सामना किया है। जब मैं अपने वर्ग वस्तु बनाया, स्वत: जनरेट .rgs फ़ाइल इस तरह देखा:ATL COM वर्ग पंजीकरण .rgs फ़ाइल चूक

HKCR 
{ 
    NoRemove CLSID 
    { 
     ForceRemove {4C6DAD45-64B4-4C55-81C6-4CE125226421} = s 'Test Class' 
     { 
      ForceRemove Programmable 
      LocalServer32 = s '%MODULE%' 
      { 
       val ServerExecutable = s '%MODULE_RAW%' 
      } 
      TypeLib = s '{EAA173CA-BDBC-463A-8B7A-B010EFA467BC}' 
      Version = s '1.0' 
     } 
    } 
} 

यह CLSID के लिए सही ढंग से रजिस्ट्री प्रविष्टियाँ बनाया। हालांकि, CoCreateInstance बाहर से फोन करने का प्रयास करते हैं, मैं एक हैंग सामना कर रहा था।

hr = CoCreateInstance(__uuidof(Test), NULL, CLSCTX_ALL, __uuidof(ITest), (void**)&pTest); 

उदाहरण के लिए कुछ अन्य परियोजनाओं को देखने के बाद, मैंने देखा है कि वे सभी प्रकार के पंजीकरण प्रविष्टियों था:

HKEY_CLASSES_ROOT\<MODULE>.<CLASS> 
HKEY_CLASSES_ROOT\<MODULE>.<CLASS>\CLSID 

मैं इन कक्षाओं के लिए .rgs फाइलों की जांच की, और पाया है कि वे किया था अतिरिक्त प्रविष्टियां मेरी .rgs फ़ाइल में मौजूद नहीं हैं। मैं उन्हें मेरा को जोड़ा गया, करने के लिए इसे बदलने:

HKCR 
{ 
    TestModule.Test = s 'Test Class' 
    { 
     CLSID = s '{4C6DAD45-64B4-4C55-81C6-4CE125226421}' 
    } 

    NoRemove CLSID 
    { 
     ForceRemove {4C6DAD45-64B4-4C55-81C6-4CE125226421} = s 'Test Class' 
     { 
      ForceRemove Programmable 
      LocalServer32 = s '%MODULE%' 
      { 
       val ServerExecutable = s '%MODULE_RAW%' 
      } 
      TypeLib = s '{EAA173CA-BDBC-463A-8B7A-B010EFA467BC}' 
      Version = s '1.0' 
     } 
    } 
} 

और लो और निहारना, मेरी CoCreateInstance कॉल उसके बाद त्रिशंकु, और मैं ठीक से एक ITest इंटरफेस के लिए सूचक को पुनः प्राप्त करने में सक्षम था।

अब, मेरे सवाल का, मन में ऊपर ब्यौरे के साथ, मैं कैसे सुनिश्चित कर सकते हैं है कि भविष्य में किसी भी कक्षाएं मैं बना यह सही .rgs फ़ाइल स्वरूप है? क्या क्लास ऑब्जेक्ट्स बनाते समय मुझे कुछ विकल्प याद आ रहा है? या क्या मुझे उपरोक्त प्रत्येक वर्ग के लिए उपरोक्त जोड़ना होगा?

मैं दृश्य स्टूडियो 2010

उत्तर

6

coclass के लिए ProgID है कि उपयोग कर रहा हूँ। इसका मुख्य रूप से स्क्रिप्टिंग भाषाओं द्वारा उपयोग किया जाता है, जो देर से बाध्यकारी का उपयोग करते हैं। CreateObject() सामान्य समारोह का नाम है। इस एक हैंग से कोई लेना देना नहीं है यही कारण है कि बताई नहीं जा सकती है, तो आप बेहतर डिबग यह चाहते।

.rgs प्रविष्टि अन्यथा स्वचालित रूप से एटीएल विज़ार्ड द्वारा उत्पन्न होती है। प्रोगिड एडिट बॉक्स निचला दायां है। यह स्वचालित रूप से उनमें से बाकी की तरह भर नहीं जाता है, आप शायद इसे याद किया।

+0

लधु जवाब है, विवरण और समाधान के लिए धन्यवाद। –

1

पांच साल बाद आने के लिए खेद है ... मुझे विजुअल स्टूडियो 2015 प्रो का उपयोग करके एटीएल COM विज़ार्ड के साथ एक ही समस्या मिली। (त्रुटि 0x80080005 - सर्वर निष्पादन विफल) यह एटीएल COM विज़ार्ड पर एक बग जैसा दिखता है (कुछ वीएस रिलीज के बाद से, और अभी भी नवीनतम वीएस2015 पर सही नहीं किया गया है)। https://connect.microsoft.com/VisualStudio/feedback/details/782281/catlservicemodulet-not-registering-components

.rgs फ़ाइलें पूरी तरह से जादूगर द्वारा भरा नहीं कर रहे हैं:

मैं इस एमएस पृष्ठ पर एक पुस्तिका सुधार के साथ एक जवाब मिल गया। उम्मीद है कि यह मदद करता है।

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