2012-03-30 11 views
0

Ich möchte ein Ereignis in VB6 mit dem folgenden Code auslösen.C#/VB6 Interop mit Formen

public delegate void EventHandler(); 

[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)] 
public interface ISOMEINTERFACE 
{ 
    [DispId(1)] 
    void MyEvent(); 
} 

[ClassInterface(ClassInterfaceType.AutoDual), 
ComSourceInterfaces(typeof(ISOMEINTERFACE)), 
ComVisible(true)] 
public class clsConVB6 
{ 
    public event EventHandler MyEvent; 

    public void DoSomething() 
    { 
     // both events are, the one from this class and the one from Form1, reach this void 
     MessageBox.Show("Event"); 
     MyEvent(); //does not raise an event when called from an event from Form1 
    } 

    public void ComInteropTest() 
    { 
     //-> this event is working fine 
     DoSomething(); 

     Form1 frm = new Form1(); 
     frm.myFormEvent += new Form1.SomeEventHandler(DoSomething); 
     frm.ShowDialog(); 
    } 
} 

Code in Form1:

public delegate void SomeEventHandler();  
public event SomeEventHandler myFormEvent; 
private void button1_Click(object sender, EventArgs e) 
{ 
    //raises an event in the c#-class clsConVB6, not in VB6! 
    myFormEvent(); 
} 

In meinem VB6-Klasse erhalte ich die erste Veranstaltung, aber ich die zweite nicht erhalten, dass durch Klicken auf eine Schaltfläche auf einem Formular erstellt wird. Das Ereignis in Form1 sendet ein Ereignis an die ClsConVB6-Klasse. Das funktioniert gut, weil ich immer die "event-msgbox" bekomme. Schließlich sollte die clsConVB6 ein Ereignis in VB6 auslösen, aber ich erhalte kein Ereignis.

Warum funktioniert es nicht, wenn ein Formular beteiligt ist? Vielen Dank für jede Unterstützung.

+1

Das ist ziemlich offensichtlich. Sie haben ein Ereignis auf clsConVB6, aber nicht auf Form1 angezeigt. Ihr VB6-Code kann keine Ereignisse für unsichtbare Klassen abonnieren. –

Antwort

0

Der oben angegebene Vorschlag war nicht die Lösung. Ich denke, ich wurde missverstanden, weil das Ereignis in Form1 kein Ereignis in VB 6 auslösen sollte, sondern in der C# -Klasse clsConVB6. Und dort sollte das erforderliche Ereignis ausgelöst werden.

Allerdings habe ich das Problem gelöst, indem Sie eine exe-Datei erstellen. Die Ereignisse haben funktioniert, ABER NUR IN DER ERSTELLTEN EXE-DATEI. Zur Laufzeit erhalte ich keine Ereignisse in Visual Basic, aber die Ereignisse funktionieren gut in der exe-Datei.

+0

Herzlichen Glückwunsch zum Fix! Wenn Sie in der Lage sind, achten Sie bitte darauf, Ihre Antwort als "akzeptiert" zu markieren, damit andere von Ihrem Erfolg lernen können. Prost ~ –