C#/VB6与窗体的互操作

本文关键字:互操作 窗体 VB6 | 更新日期: 2023-09-27 18:29:35

我想使用下面的代码在VB6中引发一个事件。

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();
    }
}

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();
}

在我的VB6类中,我接收到第一个事件,但没有接收到第二个事件,它是通过在窗体上单击按钮创建的。Form1中的事件将事件发送到clsConVB6类。这很好,因为我总是收到"事件消息框"。最后,clsConVB6应该在VB6中引发一个事件,但我没有收到事件。

为什么一旦涉及到一个表单,它就不起作用了?非常感谢您的支持。

C#/VB6与窗体的互操作

上面给出的建议不是解决方案。我想,我被误解了,因为Form1中的事件不应该在VB6中引发事件,而是在C#类clsConVB6中。在那里,应该提出所需的事件。

但是,我通过创建一个exe文件解决了这个问题。这些活动起到了作用,但只是在创建的练习中。在运行时,我不会在Visual Basic中接收到任何事件,但这些事件在exe文件中运行良好。