필자가 작성한 ActiveX 컨트롤에 난처한 문제가 발생합니다. 때때로 Internet Explorer가 프로세스 종료시 컨트롤을 제대로 언로드하지 못하는 것 같습니다. 이로 인해 컨트롤 인스턴스의 소멸자가 호출되지 않습니다.Internet Explorer가 ActiveX 컨트롤을 제대로 언로드하지 못하는 상황은 무엇입니까?
컨트롤은 C++로 작성되었으며 ATL을 사용하며 Visual Studio 2005를 사용하여 컴파일됩니다. 컨트롤 인스턴스가 포함 된 페이지에서 사용자가 이동할 때 항상 컨트롤 인스턴스의 소멸자가 호출됩니다. 브라우저에서만 문제가 발생합니다 닫은.
IE를 디버거에서 실행할 때 디버거가 예외, 액세스 위반 또는 어설 션 오류를 catch하지 않지만 문제가 여전히 남아 있습니다. 컨트롤의 중단 점을 설정할 수 있습니다. 소멸자이고 내가 broswer를 닫을 때 결코 치지 않습니다.
또한 컨트롤의 여러 인스턴스를 포함하는 간단한 HTML 페이지를로드 할 때 문제가 표시되지 않습니다. 문제는 웹 페이지에 태그를 동적으로 삽입하는 웹 애플리케이션에서 컨트롤을 인스턴스화 할 때만 발생합니다. 물론이 문제의 원인을 알지 못하더라도이 정보가 관련이 있는지 여부는 모르지만, 그러나 이것은 데이터에 의존하기 때문에 IE 문제 일 수 있음을 나타냅니다.
디버거에서 간단한 테스트 케이스를 실행하면 컨트롤의 소멸자에 중단 점을 설정할 수 있으며 매번 충돌이 발생합니다. 이것은 컨트롤 자체에 문제가 있다고 판단합니다. (예를 들어, 인터페이스 누설과 같이 소멸자가 호출되는 것을 막는 오류)
IE 6에서 테스트 한 대부분을 수행했지만 문제는 IE 7에서도 발생합니다. IE 8을 테스트하지 않았습니다.
실무적 가설은 동적 HTML 코드에 브라우저가 ActiveX 컨트롤의 인터페이스를 누설시키는 무언가가 있다는 것입니다. 지금까지 응용 프로그램 외부에서이를 재현하는 좋은 테스트 케이스를 생성 할 수 없었으며 응용 프로그램이 너무 커서 좋은 테스트 케이스를 만들 수 없습니다.
나는 이런 종류의 행동을 일으키는 것으로 알려진 가능한 IE 버그에 대해 누군가가 통찰력을 제공 할 수 있기를 바랍니다. 아래에 제공된 답변은 너무 일반적입니다.이 문제를 일으키는 것으로 알려진 특정 상황을 찾고 있습니다. 분명히 누군가가 전에 이것을 보았습니다.
제안 해 주셔서 감사합니다. 동적 인 HTML 코드는 충분히 털이있어서 어떻게 작동하는지 아무도 확신 할 수 없으며, 문제를 재현하는 테스트 케이스를 작성하기에 충분할만큼 그것을 풀기위한 시도는 지금까지 실패했습니다. –