C # / VB6 взаимодействует с формами - PullRequest
0 голосов
/ 30 марта 2012

Я хочу вызвать событие в 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.Это работает нормально, потому что я всегда получаю "event-msgbox".Наконец, clsConVB6 должен вызвать событие в VB6, но я не получаю событие.

Почему это не работает, если форма задействована?Большое спасибо за каждую поддержку.

1 Ответ

0 голосов
/ 02 апреля 2012

Предложение, приведенное выше, не было решением.Я думаю, что меня неправильно поняли, потому что событие в Form1 должно вызывать событие не в VB 6, а в классе C # clsConVB6.И там должно быть вызвано необходимое событие.

Однако я решил проблему, создав exe-файл.События сработали, НО ТОЛЬКО В СОЗДАННОМ EXE-ФАЙЛЕ.Во время выполнения я не получаю никаких событий в Visual Basic, но они прекрасно работают в exe-файле.

...