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
[1121] XE2, XE3 버전부터 윈도우2000 지원 중단
박지훈.임프 [cbuilder] 41115 읽음    2013-02-05 15:44
윈도우 2000의 지원 문제는, 대부분의 개발자분들께는 별다른 문제가 아닐텐데요. 이미 윈도우 XP 이상으로 대부분 옮겨간 상태이니까요. 그런데 소수라도 일부 개발자분들께는 윈도우 2000의 지원 여부가 꽤 중요할 수 있습니다. 그리고 그다지 중요하지 않은 분들이라도 정확하게 델파이와 C++빌더의 어느 버전까지 윈도우 2000을 지원하는지 여부 정도는 알아둘 필요는 있겠습니다.

먼저, 혼동하기 쉬운 문제 하나를 명확히 하고 가죠. 특정 윈도우 버전에서, 델파이/C++빌더 IDE 자체를 운영할 수 있느냐 여부와, 델파이/C++빌더로 개발한 애플리케이션이 지원하는 윈도우 버전이 어디까지냐는 다른 문제입니다. 이것이 이슈가 되는 이유는, 델파이/C++빌더의 XE 버전에서 이것이 차이가 나게 되었기 때문입니다.

델파이/C++빌더 XE 버전에서는, 만들어진 애플리케이션은 윈도우 2000을 지원합니다. 즉 XE 버전의 타겟 플랫폼은 윈도우 2000 버전 이후의 버전들입니다. 하지만 IDE 자체는 윈도우 2000을 지원하지 않고 XP 이상만 지원합니다. 실제로 윈도우 2000에 설치해본 결과 실행중에 여러 에러가 나면서 정상적으로 사용할 수 없었습니다. 거꾸로 말하면, 델파이/C++빌더의 XE, 2010, 2009, 2007 등의 버전들은 개발된 애플리케이션이 윈도우 2000을 공식적으로 지원합니다.

그런데 XE2 및 XE3 버전에 대해서는 확실하게 알고 있지 못해서 방금 문서들을 확인해봤는데요. 공식적으로, 엠바카데로는 델파이와 C++빌더의 XE2 버전부터 윈도우 2000 지원을 포기하고 최소 윈도우 XP 이상 버전을 요구사항으로 명시하고 있습니다. 따라서 엠바카데로는 XE2 버전부터는 개발된 애플리케이션이 윈도우 2000에서 동작하지 않거나 오동작하더라도 아무런 책임을 지지 않습니다.

하지만 약간의 테스트를 해본 결과, XE2로 개발된 애플리케이션은 윈도우 2000에서 기본적으로는 문제 증상을 보이지 않고 동작합니다. 물론 세부적으로 특정 몇몇 기능에서 문제가 생길 가능성이 얼마든지 있습니다. 제가 전혀 책임질 수 있는 문제가 아닙니다. 그래도, 개발자의 입장에서는, 어떤 특정한 경우에 꼭 필요하다면, 개발자 스스로의 선택 아래 델파이/C++빌더의 XE2 버전에서는 윈도우 2000에 맞춰서 개발하는 것이 가능하다는 얘기입니다.

이것이, XE3 버전에서부터는 달라졌습니다. 델파이/C++빌더 XE3 버전으로 만들어진 실행파일은, 빈 폼만으로 컴파일된 실행파일이라도 윈도우 2000에서 아예 실행조차 되지 않습니다. 그 이유는 TThread에 추가된 새로운 함수 때문인데요. XE3에서 TThread의 구현에는 기존에는 사용하지 않던 Win32 함수 GetSystemTimes()를 사용하는데, MS의 설명대로 윈도우 XP SP1부터 새로 추가된 함수입니다.

이 함수는 Kernel32.dll에 존재하는데요, 윈도우 2000 버전의 Kernel32.dll에는 이 함수가 아예 존재하지 않기 때문에 윈도우 2000에서는 초기 기동시에 다음과 같은 에러를 내고는 종료되어버립니다.


윈도우 2000의 전세계 OS 점유율은, 2013년 1월 기준으로 0.06%입니다. 사실 0.06%면 무시할만 하죠. 하지만 새로운 OS를 지원하기 위해 많은 노력을 들이는 데 비해, 기존에 지원하던 OS의 기능은 조금만 주의를 기울이면 지원 OS로 계속 유지할 수 있는데요. 특히 윈도우 2000의 경우 기본적으로 윈도우 XP와 큰 차이가 없는 커널이기 때문에 더욱 아쉽습니다.

TThread에서 GetSystemTimes()라는 XP 버전의 API를 사용한다고 해도, 함수 임포트 방식을 정적 로딩이 아닌 동적 로딩이나 delayed 로딩으로만 지정했어도 이런 문제는 생기지 않지요. 물론 GetSystemTimes()에서 실행이 중단되므로 그 뒤편에 다른 함수들이 더 있을지도 모릅니다만, 그렇다해도 문제는 비슷합니다. 엠바카데로의 세심한 배려가 아쉬워지는 대목입니다.

어쨌든, 정리하자면... 개발자의 입장에서 윈도우 2000을 지원해야 한다면, 공식적으로 지원을 보장받기 위해서는 델파이/C++빌더 XE 이하 버전을 써야 합니다. 그리고 XE2 버전에서는 윈도우 2000이 공식적으로 지원되지는 않지만 개발자 스스로의 위험 부담 아래에 윈도우 2000 지원이 가능하다고 할 수 있습니다. 또한 XE3 버전부터는 윈도우 2000을 지원할 방법이 전혀 없습니다.
망치 [mangchy]   2013-02-05 16:33 X
감사하게 읽었습니다.
XE3로 구매 결재중인데 XP도 SP1부터 지원하는군요. 으~~
OS 점유율은 구글링 해봐야겠군요. 현재 프로젝트가 98부터 지원하고 있어서요.
OS 점유율 보고서 작성해서 XP로 끌어올려야겠어요...
이제 빌더 2007에서 XE3로 점핑!!! 해야하는데....
현재 프로젝트 그룹에 플러그인 dll들이 20여개정도 되는데 언제 다 XE3로다가....

+ -

관련 글 리스트
1121 XE2, XE3 버전부터 윈도우2000 지원 중단 박지훈.임프 41115 2013/02/05
(링크)     Delphi Tip'N Tricks > XE2, XE3 버전부터 윈도우2000 지원 중단
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.