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中引发一个事件,但我没有收到事件。
为什么一旦涉及到一个表单,它就不起作用了?非常感谢您的支持。
上面给出的建议不是解决方案。我想,我被误解了,因为Form1中的事件不应该在VB6中引发事件,而是在C#类clsConVB6中。在那里,应该提出所需的事件。
但是,我通过创建一个exe文件解决了这个问题。这些活动起到了作用,但只是在创建的练习中。在运行时,我不会在Visual Basic中接收到任何事件,但这些事件在exe文件中运行良好。