मैं एक 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
लधु जवाब है, विवरण और समाधान के लिए धन्यवाद। –