मैं वीबी 6 में लिखित एक बड़ी परियोजना को सी # में परिवर्तित करने की प्रक्रिया में हूं। परियोजना के आकार को स्थानांतरित करने के आकार को देखते हुए, यह 18 महीनों के दौरान चरणों में किया जा रहा है। मैं एक .NET प्रोजेक्ट में VB6 ActiveX dll का संदर्भ जोड़ने के साथ किसी समस्या में भाग रहा हूं।विजुअल स्टूडियो में एक वीबी 6 संदर्भ जोड़ने से "टाइप लाइब्रेरी आयातक टाइप प्रकार सत्यापन के दौरान एक त्रुटि आई"
यदि आप इन चरणों का पालन करते हैं, तो आप भी समस्या को फिर से बनाने में सक्षम होना चाहिए।
मैं नेट में एक अंतरफलक है कि कॉम दिख रहा है लिखा है:
<ComVisible(True)>
Public Interface ITestInterface
Property A As String
Function TestMethod() As String
End Interface
का चयन करके परियोजना संपत्तियों की संकलित टैब में "COM इंटरॉप के लिए रजिस्टर", आप एक TLB फ़ाइल मिलता है।
मैंने एक वीबी 6 प्रोजेक्ट बनाया है जो इस टीएलबी और एक वर्ग का संदर्भ देता है जो इंटरफ़ेस का खुलासा करता है।
Implements ITestInterface
Private mA As String
Public Property Get ITestInterface_A() As String
ITestInterface_A = mA
End Property
Public Property Let ITestInterface_A(ByVal value As String)
mA = value
End Property
Public Function ITestInterface_TestMethod() As String
ITestInterface_TestMethod = "From VB6"
End Function
अगर मैं "दूरस्थ सर्वर फ़ाइलें" फिर एक TLB स्वचालित रूप से संकलन बनाई गई है उपयोग करने के लिए VB6 में परियोजना संपत्तियों के घटक टैब निर्धारित किया है। मैं OleView में है कि TLB देख सकते हैं और निम्नलिखित (ठोस कार्यान्वयन इंटरफ़ेस नेट परियोजना में परिभाषित की VB6 में किया के विवरण के अलावा) देख सकते हैं:
// typelib filename: TestVB6Interface.dll
[
uuid(**EF005573-BFC7-436D-A382-F906CA09F94A**),
version(3.0)
]
// ... some other stuff
// TLib : // TLib : : {79EC733A-0267-4506-8D38-C4D4655E0755}
importlib("SimpleDotNetLibrary.tlb");
अब, मैं एक पूरी तरह से नया बना सकते हैं। नेट प्रोजेक्ट
COM संदर्भ को हल नहीं किया जा सका "ef005573-bfc7-436d-a382-f906ca09f94a" संस्करण 3.0: मैं VB6 dll के लिए एक संदर्भ जोड़ दें, तो मैं निम्नलिखित त्रुटि मिलती है। प्रकार सत्यापन के दौरान टाइप लाइब्रेरी आयातक को एक त्रुटि आई। कक्षा के सदस्यों के बिना आयात करने का प्रयास करें।
हालांकि, अगर मैं एक दृश्य स्टूडियो कमांड प्रॉम्प्ट का शुभारंभ और चलाने के निम्नलिखित:
tlbimp TestVB6Interface.tlb /out:TestVB6Interface.MyInterop.dll
तब मैं अपने नेट समाधान में एक संदर्भ के रूप कि dll जोड़ सकते हैं और यह पूरी तरह से ठीक काम करता है।
मेरा प्रश्न। कमांड लाइन पर tlbimp क्या कर रहा है जो तब नहीं किया जा रहा है जब मैं सीधे संदर्भ जोड़ूं? जब विजुअल स्टूडियो में संदेश "वर्ग के सदस्यों के बिना आयात करने का प्रयास करता है" तो मैं दृश्य स्टूडियो के भीतर वास्तव में ऐसा कैसे करूं? मुझे पता है कि tlbimp में ऐसा कैसे करें।
मैं पाठ की दीवार के लिए क्षमा चाहता हूं, लेकिन मैं स्थिति का वर्णन करना चाहता था क्योंकि मैं जो जानकारी महसूस करता हूं वह मुझे प्रासंगिक था।
क्या आपने कभी यह पता लगाया है? – JMK
हमने किया (थोडा)। .NET इंटरफ़ेस को लागू करने वाली VB6 क्लास को "विशेषता VB_Exposed = False" पर सेट करने की आवश्यकता है इसका मतलब है कि यह टीएलबी में नहीं है या वीबी 6 डीएलएल के बाहर खुलासा नहीं है, लेकिन अभी भी .NET इंटरफ़ेस की अपेक्षा COM पर खुलासा किया जा सकता है (और यह वही है जिसे हम वास्तव में वैसे भी चाहते हैं)। यह लक्षण तय करता है (त्रुटि दूर हो जाती है!), लेकिन निश्चित रूप से मेरे प्रश्न में संबोधित मूल समस्या को ठीक नहीं किया क्योंकि यह समाधान हर किसी के लिए काम नहीं कर सकता है। –
शुद्ध जिज्ञासा से पूछने के लिए काफी उचित, उत्तर के लिए धन्यवाद! – JMK