2010-06-30 7 views
1

많은 서비스와 하나의 UI 모듈이있는 응용 프로그램이 있습니다. 이 모든 것들은 VC++ 6.0에서 개발되었습니다. 총 KLOC는 560 KLOC입니다.현재 32 비트 OS에서 작동하는 64 비트 OS 지원

Mutltithreading, MFC 및 word, int, long과 같은 모든 데이터 유형을 사용합니다.

이제 우리는 64 비트 OS를 지원해야합니다. 제품에 대해 변경해야 할 사항은 무엇입니까?

지원은 64 비트 OS에서 애플리케이션을 실행하고 64 비트 메모리를 사용하는 것과 같습니다.

편집 : VS2005 또는 VC6.0보다 높은 시간 제한으로 인해 마이그레이션이 배제되었습니다.

변경해야 할 사항은 무엇입니까?

+2

560,000 줄의 코드? 그것은 완벽한 사무용 솔루션 또는 운영 체제입니까? 아 ... C++ ... 알겠습니다. –

+0

표준 C++은 모든 아키텍처에서 작동해야합니다 ... –

+1

"64 비트 OS 지원"이라고 할 때, * 정확히 * 의미합니까? "64 비트 OS에서 실행"을 의미합니까? 또는 "64 비트 운영 체제의 64 비트 메모리 등을 활용 하시겠습니까?" –

답변

5

64 비트 Windows에는 32 비트 WOW가 포함되어 있습니다. 모든 32 비트 애플리케이션은 계속해서 작동해야합니다.

(그것은 는 OS의 비트 수에 맞게을 가지고 드라이버 만입니다.)

가 [덧글 참고 : 플러그인 —이 필요로하는 다른 응용 프로그램에서 사용 분리되지 않는 응용 프로그램 만의 DLL이 어떤 유형의 — 호스트와 일치시킵니다. 이 경우 64 비트 확장이 32 비트 호스트와 호환되지 않는 동일한 문제가 발생합니다.]

+1

다른 일반적인 플러그인입니다. 예를 들어 탐색기 확장을 추가하려면 OS 비트를 일치시켜야합니다. – Rup

+0

실제로 호스트 프로세스의 비트 수와 일치해야합니다. 예를 들어, 64 비트 윈도우에는 32 비트와 64 비트 버전의 IE가 모두 제공됩니다. 일치하는 플러그인도 필요합니다. – MSalters

+0

셸 확장자도 있습니다 ... – rubenvb

4

리차드가 말한 것처럼 32 비트 버전은 드라이버 나 셸 확장자가 없으면 계속 작동해야합니다.

그러나 코드를 업그레이드해야 할 경우 컴파일러도 업그레이드해야합니다. VS2005 이상이 될 때까지 MFC가 64 비트를 지원한다고 생각하지 않습니다. 나는 당신이 VS2010에 32 비트 코드를 구축 할 것을 제안합니다 - 이것은 이 아니며이 아닌 것입니다 - 그리고 64 비트로 변환하려고 생각하기 시작하십시오. VC6에 프로덕션 32 비트 빌드를 남길 수는 있지만 유지 보수 부담을 추가 할 수 있습니다.

컴파일러를 64 비트로 전환하고 전체 경고를 켜면 대부분의 변환 방법을 사용할 수 있습니다. 특히 코드 크기가 주어지면 전체를 검토하는 것이 비현실적 일 수 있습니다. 한 가지주의해야 할 점은 ints, dwords 등의 포인터를 저장하는 것입니다. 이제는 포인터를 보유하기에는 너무 짧을 수 있습니다. 이제 DWORD_PTR 등이 필요합니다.하지만 경고가이를 잡아낼 것이라고 생각합니다.

또는 여러 구성 요소에있는 경우 몇 가지 구성 요소 만 64 비트로 마이그레이션하면 해결 될 수 있습니다. 그런 다음 불행히도 두 버전 간 통신에 데이터 길이 문제가 있습니다.

1

IDE를 본질적으로 64 비트 컴파일 및 디버깅을 지원하는 것으로 변경하려는 경우, 작업이 불필요하게 더 복잡해집니다. 히트 할 가치가 없다고 확신합니까?

+0

귀하의 우려를 이해하지만 관리자는 일정 및 리소스 제약 사항에 따라 전화를 받아야합니다. – ckv

+0

필자는 64 비트 MFC 지원을 얻으려면 64 비트 컴파일러가 아니라면 직접해야한다고 생각합니다. – Rup

+2

그런 다음 관리자가 다른 IDE보다 64 비트 지원을 개발하는 것이 대안보다 더 많은 시간과 리소스를 필요로한다는 것을 확신시켜야한다고 제안합니다. –

2

보다 최신 컴파일러로 변환해야합니다. 시간 제약은 거의 무의미합니다. VC6 컴파일러는 단순히 64 비트 코드를 생성 할 수 없습니다. 모든 포인터는 처음에는 32 비트입니다. "64 비트 메모리", 즉 0x00000000FFFFFFFF 위의 메모리에 액세스해야하는 경우 32 비트만으로는 충분하지 않습니다.

0

64 비트 OS에서 실행하기 위해서만 변경할 필요가 없습니다. 그것이 바로 WOW64입니다.

그러나 기본적으로 64 비트를 실행하려는 경우 (예 :, 64 비트 메모리 공간에 액세스) 64 비트로 컴파일해야합니다. 이는 64 비트를 지원하는 IDE를 사용한다는 것을 의미합니다. 이 문제를 해결할 방법이 없습니다.

대부분의 프로그램은 괜찮은 코딩 표준 (주로 int 포인터 변환과 같은 포인터의 크기에 대한 가정이없는)으로 작성된 경우 64 비트로 변환해도 문제가 없습니다. std :: size_t 전환과 같은 것에 대해 많은 경고를 얻지 만, 그들은 상당히 의미가 없습니다.

관련 문제