Implement IDispatch::Invoke to be called by a WebBrowser control

Я пытаюсь сделать то, что они объясняют в этой статье в разделе Controlling Download and Execution. Я понимаю, что Web Browser Control в этом контексте не является WebBrowser из .NET.

Я пытаюсь получить контроль над тем, что загружает элемент управления WebBrowser. Я много искал это и всегда попадал в csEXWB, который имеет огромный код, который я просто не могу расшифровать.

Что я сделал до сих пор, так это унаследовал . NET WebBrowser, сделал мой унаследованный класс com видимым с помощью атрибута [ComVisible(true)], добавил этот метод в мой класс (взятый из csEXWB):

    [DispId(HTMLDispIDs.DISPID_AMBIENT_DLCONTROL)]
    public int Idispatch_AmbiantDlControl_Invoke_Handler()
    {
        return (int)m_DLCtlFlags;
    }

А затем вызовите эту строку кода, где Browser является экземпляром моего производного класса:

IfacesEnumsStructsClasses.IOleControl oleControl = Browser.ActiveXInstance as IfacesEnumsStructsClasses.IOleControl;
oleControl.OnAmbientPropertyChange(IfacesEnumsStructsClasses.HTMLDispIDs.DISPID_AMBIENT_DLCONTROL);

Итак, я надеюсь, что oleControl вызовет мой Idispatch_AmbiantDlControl_Invoke_Handler метод, но он этого не делает. Я не знаю, как, и это, вероятно, то, чего не хватает в моем коде, oleControl должен знать, на каком объекте вызывать мой Idispatch_AmbiantDlControl_Invoke_Handler метод.

В статье, на которую я ссылался выше, говорится, что он вызовет ваш IDispatch::Invoke. Что означает ваш. Как мне сказать oleControl, какой объект является моим IDispatch. Надеюсь, я понятно объясняю.

7
задан Ahmet 30 September 2011 в 09:39
поделиться