2012-02-13 7 views
6

से vb6 dlls को कॉल करना मैं रजिस्ट्री का उपयोग किए बिना एक सी तेज एप्लिकेशन से vb6 dll कॉल करने का प्रयास कर रहा हूं। मैं इसका उपयोग करते समय डीएल के पथ का उपयोग करना चाहता हूं। मैं vb dll की कक्षा का ऑब्जेक्ट बनाने में असमर्थ हूं। कृपया सहायता कीजिए!सी #

Assembly assem = Assembly.LoadFile("dll path"); 
Type classType = assem.GetType("classname"); 
MethodInfo method = classType.GetMethod("show"); //My methos is called show 
method.Invoke(null,null); // I have to invoke the method using class object, which I am unable to create 
+5

'VB6' DLLs' PInvoked', जिस तरह से आप वर्तमान में उन्हें लोड कर रहे हैं किया जाना चाहिए '.NET' DLLs – fardjad

+0

@bhavna के लिए है मुझे यकीन है कि अगर आप Assembly.LoadFile का उपयोग कर' VB6 DLL उपयोग कर सकते हैं नहीं कर रहा हूँ '। क्या आपने [PInvoke] (http://msdn.microsoft.com/en-us/library/aa288468%28v=VS.71%29.aspx) का उपयोग करके फ़ंक्शन को कॉल करने का प्रयास किया है? – Searock

+0

ठीक है। टिप के लिए बहुत बहुत धन्यवाद। लेकिन मैं तेज तेज नेटवर्क के लिए बहुत नया हूँ। क्या आप कृपया मुझे मार्गदर्शन कर सकते हैं कि vb6 dll से विधि को कॉल करने के लिए कोड को तेज में लिखा जाना चाहिए? किसी भी तरह की मदद की सराहना की जाएगी। – bhavna

उत्तर

1

यह मानते हुए कि विधि show निर्यात तालिका में है dll में, DllImportAttribute का उपयोग कर शो विधि कॉल करने का प्रयास करें: कोड मैं अब तक लिखा है इस प्रकार है।

+0

यह एक अच्छा दृष्टिकोण है – Ravia

+1

100 में से 99 बार एक वीबी 6 डीएलएल निर्यात तालिका के माध्यम से कुछ भी उपयोगी नहीं करेगा। वे COM DLls हैं। (* शायद ही कभी * एक डीएलएल लेखक कार्यों को निर्यात करने के लिए ब्लैकबेल्ट तकनीकों का उपयोग करेगा जैसे कि डीएलएल पुरानी शैली डीएलएल था।) – MarkJ

+0

क्या आप कृपया मुझे ऐसा करने के लिए आवश्यक कोड का एक उदाहरण दे सकते हैं? – bhavna

6

एक वीबी 6 डीएलएल एक COM DLL है। आमतौर पर आप DLL (रजिस्ट्री में) पंजीकृत करेंगे और फिर अपने .NET प्रोजेक्ट से VB6 DLL का संदर्भ जोड़ देंगे।

यह MSDN article एक .NET ऐप से रजिस्ट्री-मुक्त COM का उपयोग करने की एक walkthrough देता है।

+0

आपकी मदद के लिए धन्यवाद दोस्तों, लेकिन ये लेख केवल Win32 dlls के उपयोग के बारे में जानकारी प्रदान करते हैं: '(मेरे पास एक vb6 dll है जिसका उपयोग सी # । – bhavna

+1

लिंक में नेट क्लाइंट और वीबी 6 सर्वर पर जानकारी शामिल है। इस खंड को देखें, चरण 2 भाग बी http://msdn.microsoft.com/en-us/library/ms973913.aspx#rfacomwalk_topic5 और यह अनुभाग http://msdn.microsoft.com/en-us/library/ms973913 .aspx # rfacomwalk_topic7। मैं मानता हूं कि यह बेहतर होगा अगर आलेख सी ++, सी #, वीबी.नेट और वीबी 6 को एक लेख में कवर करने का प्रयास नहीं करता! – MarkJ

2

मार्कजे के उल्लेख के रूप में आपका वीबी 6 डीएल एक COM Dll है, और आमतौर पर उन्हें उपयोग करने से पहले उन्हें regsvr32 का उपयोग करके पंजीकृत होना आवश्यक है।

एक बार यह पंजीकृत हो जाने पर आप एक संदर्भ जोड़ सकते हैं जैसा कि आप .NET dll के साथ करेंगे, यानी प्रोजेक्ट में संदर्भों पर राइट क्लिक करें, संदर्भ जोड़ें पर क्लिक करें, फिर विंडो पर COM टैब का चयन करें और अपनी तलाश करें COM डीएल नाम।

फिर आप इसे .NET संदर्भ की तरह उपयोग करने में सक्षम होना चाहिए।
यहां माइक्रोसॉफ्ट एक्सेल के COM संदर्भ का उपयोग करने का एक उदाहरण दिया गया है।
How to: Use COM Interop to Create an Excel Spreadsheet

आप विशेष रूप से लेट बाइंडिंग चाहते हैं, तो अपने dll अभी भी पंजीकृत होना आवश्यक है, लेकिन आप मैन्युअल रूप से एक संदर्भ जोड़ने नहीं है, आप Activator.CreateInstance का उपयोग करें() अपने COM वस्तु का एक उदाहरण मिलता है।
Calling COM component from C# using late binding

+0

हाय, मुझे रजिस्ट्री जानकारी का उपयोग किए बिना देर से बाध्यकारी द्वारा इसका उपयोग करने की आवश्यकता है। यही समस्या है! – bhavna

+1

क्या आप मुझे अपने परिदृश्य पर अधिक जानकारी दे सकते हैं? क्या डीएल लक्ष्य प्रणाली पर पंजीकृत होगा और सिर्फ आपके नहीं? क्योंकि मुझे नहीं लगता कि उन्हें पंजीकृत किए बिना COM dlls का उपयोग करना वास्तव में संभव है। – Nanhydrin

+0

यह आलेख प्रासंगिक हो सकता है [COM घटकों का पंजीकरण मुक्त सक्रियण] (http://msdn.microsoft.com/en-us/library/ms973913.aspx) – Nanhydrin