대단히 간단한 소스이고 다른 버전의 OS에서 문제가 발생하지 않았다면..
역시 윈도우 버전의 차이일 가능성이 가장 크겠네요.
델파이7은 XP가 출시된 직후에 나왔으므로 당연히 XP까지만 지원합니다.
델파이7의 OS 호환성 테스팅을 XP까지만 했다는 뜻이죠. 따라서 윈도우2003에 대해 문제가 생길 가능성은 충분히 있습니다.
그리고 그건 볼랜드에 달린 것이 아니라 MS에 달린 거죠. MS가 충분한 호환성을 제공해주지 못하면 델파이를 비롯해서
이전 버전의 윈도우용으로 개발된 모든 소프트웨어에서 문제가 발생할 수 있습니다.
윈도우와 MS가 무조건 기준이 되는 것이 아니기 때문에, 기존의 핵심 소프트웨어와 호환되지 않으면 윈도우를 업그레이드
하지 않습니다. 실제로도 그런 기업들의 사례가 많이 있습니다. MS가 열심히 홍보를 한다고 무조건적으로 윈도우를 최신
제품으로 업그레이드하는 것이 안좋은 이유들 중에 하나죠.
일단 문제를 정확하게 진단하는 것이 급선무니...
권하기로는, 주변의 가까운 누구에게라도 부탁해서 BDS2006에서 빌드해서 실행해보시기 바랍니다.
그러면 뭐가 문제인지 대략 판단할 수 있겠죠.
그럼...
ayh 님이 쓰신 글 :
: 최근 일종의 서버를 하나 제작했습니다.
:
: Delphi7을 사용해서 XP 환경에서 개발을 했고,
: 실제 win2000 server에서 서비스중입니다.
:
: 한달정도 운영중인데, 총 2주정도 우여곡절을 거쳐서 최근 2주동안에는 안정적으로 진행되고 있어서, 이제는 어느 정도 안정화가 끝났다고 생각하던 중입니다.
:
: 그런데, 새로운 서버 한대를 증설하는 과정에서 요새는 win2003 서버를 쓴다고 권하길래 별 생각없이 win2003서버를 설치했었습니다. 이상한 게 2003서버에서만 서버가 구동된지 약 10시간 정도 지나면 제 생각으로는 전혀 오류가 나지 않을 상황에서 access violatoin이 일어납니다.
: 이상하다는 건, 해당 부분이 네트워크를 통해서 프로토콜을 전송받은 후 이 값을 "StringList에 넣어서 delimiter 단위로 데이터를 쪼개는 부분과 그 데이터에 따라서 Client 객체의 값 하나를 변경"하는 게 전부이기 때문입니다.
:
: except 구문에서 잡아낸 오류 메세지입니다.
:
: Error @IdTCPServerExecute:Access violation at address 004022E8 in module '----.exe'. Write of address E6F02C10
:
: .map 파일을 뒤져보면 004022E8 번지가 제가 작성한 코드는 아닌 것 같고, 그렇다면 사용중인 라이브러리의 내부에서 문제가 생기는 듯 한데, 그래봤자 제가 작성한 클래스가 아닌 건 TStringList 객체와 GetTickCount() 함수가 전부입니다.
:
: 그렇다면 제 생각이 맞다면, TStringList 나 GetTickCount 함수가 win2003에서는 무언가 문제를 일으킬 수 있다는 얘기가 되는 것 같습니다만, 그리고 조금 더 생각해보니 아무래도 TStringList 가 문제를 일으킬 수 있는 소지가 더 많다는 생각이 듭니다.
:
: 혹시 win2003에서의 이와 같은 문제에 대해 경험해 보시거나 알고 계신 내용 있으면 도움 부탁드립니다.
: Delphi7에서 빌드했었습니다.
: 감사합니다. 좋은 하루 되세요.
|