2008-12-15 12 views
11

मेरे पास एक .NET असेंबली है जिसे मैंने एक टीएलबी फ़ाइल के माध्यम से COM के संपर्क में लाया है, और एक इंस्टॉलर जो tlb को पंजीकृत करता है। मैंने मैन्युअल रूप से जांच की है कि इंस्टॉलर सही तरीके से काम करता है और COM क्लाइंट लाइब्रेरी तक पहुंच सकते हैं। अब तक, बहुत अच्छा ...क्या .NET से COM-Exposed असेंबली का परीक्षण करना संभव है?

हालांकि, मैं कुछ स्वचालित सिस्टम परीक्षणों को एक साथ रखने की कोशिश कर रहा हूं जो जांचता है कि इंस्टॉलर सही तरीके से काम कर रहा है। इसके हिस्से के रूप में मैंने एक वीएम पर स्थापना स्वचालित कर दी है, और अब मैं स्थापित COM लाइब्रेरी में कुछ कॉल करना चाहता हूं ताकि यह सत्यापित किया जा सके कि यह सही तरीके से काम कर रहा है। मैंने मूल रूप से वीबी 6 में कुछ परीक्षण लिखने के बारे में सोचा था, लेकिन मेरे पास पहले से ही सी # में लिखे गए परीक्षणों का एक बड़ा सूट है, जो .NET असेंबली का संदर्भ देता है। मैं उम्मीद कर रहा था कि मैं इसे .tlb के संदर्भ में बदल सकता हूं, लेकिन जब मैं इसे VS2008 के भीतर आज़माता हूं तो मुझे एक त्रुटि मिलती है:

ActiveX प्रकार लाइब्रेरी 'blah.tlb' को .NET असेंबली से निर्यात किया गया था और जोड़ा नहीं जा सकता संदर्भ के रूप में।

क्या कोई तरीका है कि मैं इस संदर्भ को जोड़ने की अनुमति देने के लिए VS2008 को मूर्ख बना सकता हूं, शायद टीएलबी फ़ाइल संपादित करके?

गुगलिंग किसी भी समाधान के साथ नहीं आया है। http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=120882

+0

कुछ लोगों ने tlbimp.exe का उपयोग करके उल्लेख किया है। अगर मैं tlbimp.exe blah.tlb को आज़माता हूं तो मुझे त्रुटि मिलती है: "टाइप लाइब्रेरी ब्लाह को सीएलआर असेंबली से निर्यात किया गया था और सीएलआर असेंबली के रूप में फिर से आयात नहीं किया जा सकता है।" – Akash

उत्तर

12

निकटतम मैं समाधान के लिए प्राप्त कर चुका हूं निम्नलिखित की तरह कुछ:

using System; 
class ComClass 
{ 
    public bool CallFunction(arg1, arg2) 
    { 
     Type ComType; 
     object ComObject; 

     ComType = Type.GetTypeFromProgID("Registered.ComClass"); 
     // Create an instance of your COM Registered Object. 
     ComObject = Activator.CreateInstance(ComType); 

     object[] args = new object[2]; 
     args[0] = arg1; 
     args[1] = arg2; 

     // Call the Method and cast return to whatever it should be. 
     return (bool)ComType.InvokeMember("MethodToCall", BindingFlags.InvokeMethod, null, ComObject, args)) 
    } 
} 

यह बहुत सुंदर नहीं है, लेकिन मुझे लगता है कि यह बिंदु पूरी हो जाती है। आप निश्चित रूप से कॉमऑब्जेक्ट तत्काल को एक कन्स्ट्रक्टर में डाल सकते हैं और बाकी कॉल को ऑब्जेक्ट में लपेट सकते हैं, लेकिन शायद टेस्ट कोड के लिए आवश्यक नहीं है।

+0

+1 में टाइप किया गया है तो Type.GetTypeFromProgID विधि के लिए, यह COM प्राप्त कर सकता है प्रकार। मैंने कोशिश की, यह काम करता है (लेकिन क्या संदर्भ जोड़ने में व्यावहारिक अंतर है? मुझे नहीं पता)। उदाहरण में – peenut

+0

'methodCOM' वास्तव में' कॉमटाइप 'चर होना चाहिए। – glebd

-1

tlbimp.exe का उपयोग करके आप जो .NET कोड में इस्तेमाल किया जा सकता अपने COM घटक से एक विधानसभा उत्पन्न कर सकते हैं

+2

नहीं यदि COM घटक सी # या अन्य .NET भाषा –

+2

-1 में टिप्पणी के रूप में बनाया गया था तो नहीं: यदि COM घटक को C# या अन्य .NET भाषा – peenut

0

आप होना चाहिए: सभी मैं पाया है यह बताते हुए कि यह एक माइक्रोसॉफ्ट कनेक्ट लेख "द्वारा डिजाइन" है TLBImp का उपयोग कर अपने स्थापित COM घटक में एक रैपर क्लास बनाने में सक्षम होने के बाद उसके खिलाफ अपने परीक्षण चलाएं। आप मूल रूप से एक .NET असेंबली लिख रहे होंगे, जिसे COM को तब रैपर क्लास के विरुद्ध परीक्षण करना होगा ताकि आपके परीक्षणों को रूट किया जा सके जैसे कि इसे COM घटक

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