2010-01-02 2 views
1

저는 C#을 사용하여 IE 용 BHO를 작성하고 있습니다. 내가 염려하는 코드는 다음과 같습니다.관리되는 BHO가 보호 모드를 사용하여 인스턴스화되지 않음

public class BHO : IObjectWithSite, IOleCommandTarget 
{ 
    ... 
    public BHO() 
    { 
     MessageBox.Show("Constructor called"); 
    } 

    public int SetSite(object site) 
    { 
     MessageBox.Show("SetSite called!"); 
     if(site != null) 
     { 
      _webBrowser = (WebBrowser) site; 
      _webBrowser.NavigateComplete2 += OnNavigateComplete2; 
     } 
     else 
     { 
      _webBrowser.NavigateComplete2 -= OnNavigateComplete2; 
      _webBrowser = null; 
     } 
     return 0; 
    } 

    private void OnNavigateComplete2(object pDisp, ref object URL) 
    { 
     MessageBox.Show("OnNavigateComplete2 called"); 
    } 

IE가 보호 모드를 해제 한 상태로 실행하면 모든 것이 정상적으로 작동합니다. 그러나 보호 모드가 켜져 있으면 NavigateCompleted2()가 호출되지만 SetSite() 및 생성자는 호출되지 않습니다 (!?!). 그러나 BHO 클래스에서 메서드를 호출하는 메뉴 항목을 만들거나 새 탭을 열면 모든 항목이 올바르게 호출됩니다. 새 IE 창을 열 때 왜 작동하지 않는지 아는 사람 있습니까?

전체 소스 목록은 here입니다.

답변

0

MSDN의 누군가가 내 질문에 대답했다. 생성자와 메서드가 여전히 호출되었지만 페이지가로드 될 때까지 보호 모드에서 새 창을 열면 어떤 이유로 MessageBoxes가 표시되지 않습니다. 다른 문제로 인해 변수가 설정되지 않았습니다. 생성자가 자동으로 실패한 객체를 인스턴스화했습니다.

이제 다른 (very much related) 문제와 관련하여 도움이 필요합니다.

관련 문제