вызов функции JavaScript из ActiveX - PullRequest
1 голос
/ 07 августа 2009

Я строю небольшой элемент управления ActiveX. Я понял, что activex не может напрямую вызывать функцию javascript, но ему нужно работать через события. Поэтому я создал событие, скопированное из примера кода из codeproject.

Кажется, что событие работает только при определенных обстоятельствах: оно работает, когда вызывается функция javascript, которая немедленно вызывает событие. Это не работает, когда моя функция javascript вызывает метод activex, который выполняет длинную операцию и только затем вызывает событие, вот пример того, что я имею в виду:

Событие Activex:

[Guid("68BD4E0D-D7BC-4cf6-BEB7-CAB950161E79")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ControlEvents
{
    //Add a DispIdAttribute to any members in the source interface to specify the COM DispId.
    [DispId(0x60020001)]
    void OnClose(string redirectUrl); //This method will be visible from JS
}

Пример вызова, который работает:

    [ComVisible(true)]


public void Close()
    {
        if (OnClose != null)
        {
            OnClose("my test"); //Calling event that will be catched in JS
        }
        else
        {
            MessageBox.Show("No Event Attached"); //If no events are attached send message.
        }
    }

Пример сбоя вызова:

[ComVisible(true)]
        public void Open()
        {
            try
            {
                Start();
            }
            catch (Exception e)
            {
                throw e;
            }
        }

С помощью функции Start вызывайте очень длинный метод, который, в свою очередь, вызывает события раз в несколько минут и отправляет информацию обратно в javascript.

Кажется, я не понимаю, почему это не сработает. Чего не хватает? Извините, если вопрос не ясен, ошибка, которую я получаю, тоже не ясна, поэтому просто задайте вопрос, и я уточню вопрос.

1 Ответ

1 голос
/ 11 марта 2010

Я не вижу ни одного события, объявленного в вашем коде. Что-то должно быть

открытый делегат void EvenHanderDelegate (string redirectUrl);

открытое событие EnvenHanderDelegate OnClose;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...