C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[40] 팁! comctl32.dll 버전 알아내기
박지훈.임프 [cbuilder] 8627 읽음    1999-06-04 00:00
임프랍니다..
오늘은 제가 지금 좀 바빠서리.. 에구.. 팁을 따로 준비하질 못했습니다.
그래서.. 생각나는대로 comctl32.dll의 버전을 판별하는 방법이나 써보겠습니다.

델파이나 C++빌더 어플리케이션(혹은 어떤 어플이든지)을 작성하면서, comctl32.dll의 버전을 알아내는 것은,
생각보다 상당히 심각한 문제입니다. 왜냐하면, 이녀석의 버전에 따라 사용할 수 있는 컨트롤이 있고 또 사용할 수
없는 컨트롤도 있을 수 있기 때문입니다.

대표적인 것으로, 쿨바를 들 수 있습니다.
98이 아닌 윈도우즈 95를 사용하고, 또 익스플로러를 한번도 버전업하지 않아 3.0인 상태라면, comctl32.dll의
버전은 0x00040046 입니다. 버전이 40046이라면 쿨바 컨트롤은 포함되어 있지 않으므로, 이 상태 그대로 쿨바를
사용한 어플을 실행시키면.. 무시무시한~ 억세스 바이얼레이션! 이 생긴답니다.
비단 쿨바뿐 아니라, 익스플로러 4.0이상에서 추가된 컨트롤들을 사용하면 같은 일을 겪게 됩니다.
뭐 델4에서 추가된 컨트롤바도 그렇고, 또 몇가지..
또 빌더나 델파이 뿐 아니라 어떤 어플을 써도 마찬가지입니다. 모두 쿨바를 사용하기 위해서는 공용컨트롤인
comctl32.dll에서 임포트를 해오기 때문이죠.

이러한 이유 때문에, comctl32.dll의 버전을 알아내는 것은 상당히 중요합니다. 또 간접적으로는,
이 dll의 버전으로서 설치된 익스플로러의 버전을 유추할 수도 있겠죠.

그럼.. 본론으로 들어가서.. 어떻게 알아내는가??
는.. 무지 간단합니다. (앞서도 말했지요.. 시간이 없어서 생각나는대로 쓴다구..)
멋지게도.. vcl에는 이늠의 버전을 알아내는 함수가 있습니다.
(아마도, 델파이2에서 이늠의 버전땜시 난리를 친 후에 인프라이즈에서 쫄았나 보죠~)
이름은 GetComCtlVersion()이구요, 인자도 없이, 그냥 호출하면 int 형으로 버전이 넘어옵니다.
앞에서도 말했지만, 익스플로러 3.0에서는 0x00040046, 4.0 이상은 00040047 이상이 나옵니다.
제 컴에서는 00040048로 나오더군요. (기억이 가물거리지만.. 5.0을 깔았던거 같네요.)

오늘의 본론은 여기서 끝이지만..
만약 이 comctl32의 버전이 새버전인지 아닌지 애매한 사용자에게 어플을 배포하려면?
당근 설치프로그램에서 이늠을 같이 깔아줘야겠죠?
인스톨실드 익스프레스에는 지정한 파일을 특정 폴더에 깔아주는 기능이 있습니다.
이때 버전, 혹은 파일날짜로 비교하여 최신일경우만 카피하도록 지정해줄 수 있죠.

에구.. 오늘은 팁이 좀 성의가 없나요..?
죄송~ 지금 넘 바빠서.. 쩝.. 따로 준비할 시간이 모자라요..
내일은 보다 멋지고.. 황당하고.. 눈이 번쩍 뜨일 팁으로 빌라의 여러분들을 즐겁게 해드릴 것을 약속드리면서..
오늘은 이만... ^^;;;;;


독립문에서 임펠리테리였습니다.

+ -

관련 글 리스트
40 팁! comctl32.dll 버전 알아내기 박지훈.임프 8627 1999/06/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.