ActiveX 설치 확인하기

[Web Programming/JavaScript]

ActiveX를 사용하다 보면 설치되지 않았을 때,
페이지 위에 노란 줄이 보이면서 ActiveX 자리에 보기 흉하게 엑박이 뜨는 것을 볼 수 있다.

좀 더 미려한 처리를 위해
설치 되지 않았을 때 예정된 페이지로 리다이렉트 하거나
적절한 문구의 팝업을 띄워주면 어떨까?

이릉 위해서는 먼저 ActiveX가 설치 되었는지를 확인해야 한다.
다음은 이를 확인하는 스크립트이다.

<script>
var isInstalled = true;
try
{
 var myobj = new ActiveXObject("serverName.typeName.1");
 isInstalled = (myobj != null);
}
catch (e)
{
 isInstalled = false;
}
if (!isInstalled)
 alert('설치되지 않았습니다.');
</script>

실질적으로는 null 검사 전에 new에서 exception이 발생하여 catch에서 걸리게 된다.
전에 코드 정리 중 try/catch를 제거한 뒤 동작이 안한다고 고민하며 고생한 적이 있다.
주의하기 바란다.

2008/06/30 09:47 2008/06/30 09:47

ATLASSERT error on line3637 of atlcom.h

[Win32 Programming/ATL/WTL]
<환경>
- Visual C++ .NET 2003
- WTL 8.0

WTL Application에서 ActiveX를 호스팅 할 경우
디버그 모드로 실행 중 다음과 같은 에러 메세지를 만나게 된다.


위의 경고문은 'atlcom.h' 파일의 3637번째 줄에 존재하는 아래의 코드에 의해 발생한다.

ATLASSERT(!InlineIsEqualGUID(*m_plibid, GUID_NULL) && "Did you forget to pass the LIBID to CComModule::Init?");

Microsoft에 다음과 같은 support page가 있었으나 크게 도움이 되지는 않았다.

위 에러에는 다음과 같이 두 가지 해결책이 있다.

1. 프로젝트 속성의 'ATL 사용' 속성을 'ATL에 동적 링크'로 설정.
2. '_tWinMain'의 코드 일부를 아래와 같이 변경
<변경 전>
hRes = _Module.Init(NULL, hInstance);

<변경 후>
GUID guid;
hRes = _Module.Init(NULL, hInstance, &guid);
2007/12/28 22:10 2007/12/28 22:10

[VC++] 전병선의 Component Development with Visual C++ & ATL (★★★★☆)

[추천도서/프로그래밍]

제목 :  전병선의 Component Development with Visual C++ & ATL
출판사 : 영진.COM
저자 : 전병선

내가 이 책을 구입한 것이 2005년 10월쯤 이었던 것으로 기억된다.
당시에 VC++ 경력 1년 정도의 풋내기였고,
그것도 중간에 수술로 두달이나 쉬어서 정말 엉망진창의 신입이었다.

이 책을 구입하게 된 계기는 ActiveX 업로드 컴퍼넌트 개발 때문이었다.
다음카페에서 글을 쓸 때 하단에 보이거나
데브피아에서 '덱스트 업로드'라고 판매하는 그런 류의 물건 말이다.

그 당시 나는 MFC도 많이 서툴렀고,
COM/ActiveX는 문외한이었으며,
웹이라면 끔찍히 싫어하던 그런 시절이었다.
그런 본인이 이 책을 길잡이 삼아 한 달 동안 미친듯이 공부해서 결국 완성을 시켰고,
그 뒤로 본인은 회사의 ActiveX 전담 개발자가 되었다.
그리고 후에 Mozilla Plugin까지 전담하게 되었다.

뭐, 어쨌든지 당시 이 책이 없었더라면
나는 그 프로젝트를 성공하지도 못했을 것이고,
지금과 같은 실력과 자신감을 얻지도 못했을 것이다.

COM을 공부하려고 마음 먹었다면,
꼭 이 책을 한 번 보기를 권유하는 바이다.
단, 이 책을 보며 실무에 적용할 때
책에서 알려주지 않았던 아쉬운 내용들이 조금 있기에
평가는 별 네개로 결정하였다.

2007/01/14 21:21 2007/01/14 21:21