2011-08-16 32 views
5

में सी # .नेट इवेंट की सदस्यता लें मुझे वीबी 6 में एक .NET ईवेंट को संभालने में सक्षम होना चाहिए। अब तक मैंने इसे सी # कक्षा COM बनाकर स्थापित किया है। मेरा वीबी 6 ऑब्जेक्ट इसे ठीक तरीके से कॉल कर सकता है लेकिन अब मुझे .NET से VB तक संवाद करने के लिए कुछ तरीका चाहिए। यदि मैं अपने सी # वर्ग में एक ईवेंट जोड़ता हूं तो .NET wrapper एक add_EventName और remove_EventName जोड़ता है जो मुझे लगता है कि यह सदस्यता लेने और ईवेंट की सदस्यता समाप्त करने के लिए है। लेकिन जब भी वीबी 6 की बात आती है और मैं आती हूं तो मैं अभी भी एक नौसिखिया हूं इसलिए मुझे यकीन नहीं है कि इसका उपयोग कैसे किया जाए।वीबी 6

add_EventName एक EventNameEventHadler लेता प्रतीत होता है लेकिन मैं इसे क्या दे सकता हूं? मैंने सब की कोशिश की लेकिन यह मुझे रनटाइम त्रुटि देता है। किसी को भी इसका उपयोग कैसे पता है? यहाँ मैं क्या

Private oHost As HostService.IHost 

Private Sub Form_Load() 
    Set oHost = New HostService.Host 
    oHost.Start 
    oHost.add_EvalReceived EvalReceivedEventHandler 
End Sub 

Private Sub EvalReceivedEventHandler(ByVal sender As Variant, ByVal e As EvalReceivedEventArgs) 
MsgBox "Eval Received in VB: " & e.Eval.TimeSent & ":" & e.Eval.FirstName & " " & e.Eval.LastName & " - " & e.Eval.Comments 
End Sub 

तो oHost.add_EvalReceived लाइन का एक उदाहरण है गलत है

+0

की तरह लग रही समाप्त हो गया ओह और oHost मेरी कॉम दिखाई .net वस्तु –

उत्तर

4

आप की कोशिश कर सकते oHost

Private WithEvents oHost As HostService.IHost 
की अपनी घोषणा के WithEvents जोड़ने

फिर आईडीई आपको oHost पर ईवेंट हैंडलर बनाने की अनुमति देनी चाहिए। यह आपके ईवेंट हैंडलर बनाने जैसा है। कोड विंडो के ऊपरी-बाएं हिस्से में ड्रॉप-डाउन आपको oHost चुनने देना चाहिए।

अस्वीकरण: मैंने COM ऑब्जेक्ट्स से ईवेंट को संभालने के लिए कई बार इसका उपयोग किया है। मैंने कभी इंटरपॉप के माध्यम से .NET ऑब्जेक्ट से ईवेंट को संभालने का प्रयास नहीं किया है, लेकिन मुझे लगता है कि आपको ऐसा करना होगा।

+0

कुछ और आप .net वस्तु को क्या करने की जरूरत है है? जब मैं –

+0

@ नाइट्रो 52 को संकलित करने का प्रयास करता हूं, तो मुझे ऑब्जेक्ट "ऑब्जेक्ट ऑटोमेशन इवेंट्स स्रोत नहीं करता है" मुझे नहीं पता, क्षमा करें :(मैंने वास्तव में कभी इंटरऑप ऑब्जेक्ट के साथ इसका उपयोग नहीं किया है। आप [यह जवाब] देख सकते हैं (http://stackoverflow.com/questions/2766656/handling-events-exposed-on-a-net-class-via-com-in-vb6/2772558#2772558)? – MarkJ

1

VB6 में आप प्रतिनिधि परोक्ष बनाने के लिए AddressOf ऑपरेटर का उपयोग कर सकते हैं:

oHost.add_EvalReceived AddressOf EvalReceivedEventHandler 
4

ठीक है, मुझे मार्कजे से मदद के साथ काम मिल गया। मुझे एक इंटरफेस होना था जो COM के लिए मेरे कार्यक्रमों का प्रतिनिधित्व करता है। तो वे इस

[ComSourceInterfaces(typeof(IHostEvents))] 
[ClassInterface(ClassInterfaceType.None)] 
[Guid("037CF765-4C30-4CF7-969C-1775E79844CE")] 
public class Host : IHost 
{ 
    //IHost implementation 
} 

[ComVisible(true)] 
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] 
[Guid("8C0C3F0E-5793-4E11-AB20-3A556C0B6790")] 
public interface IHostEvents 
{ 
    [DispId(1)] 
    void EvalReceived(object sender, EvalReceivedEventArgs e); 
}