2008-10-28 32 views
5

Có điều gì tôi nên biết trước khi chuyển đổi chương trình C++ lớn từ VS2005 sang VS2008 không?Bất cứ điều gì tôi nên biết trước khi chuyển đổi một chương trình C++ lớn từ VS2005 sang VS2008?

+0

Gắn thẻ VC++ thành VisualC++, cố gắng để SO chuẩn hóa trên một thẻ ... – Aardvark

+0

'VS2005' bao gồm Windows SDK ** 5.0 **,' VS2008' bao gồm Windows SDK ** 6.0 **. Xem ["Sự khác nhau giữa các phiên bản Windows SDK 5.0 và 6.0"] (http://linuxtesting.org/compatibility/Windows_SDK_5.0_to_Windows_SDK_6.0/x86/abi_compat_report.html) để so sánh chi tiết. – aponomarenko

Trả lời

8

Tôi đang làm việc về vấn đề này rất ngay bây giờ.

Chạy WinMerge để xem những gì tôi đã thay đổi ...

OK, đây là những gì tôi đã phải sửa chữa trong một ứng dụng client Win32/MFC khổng lồ:

Một số chức năng MFC đã trở thành ảo (mà không phải trong quá khứ - CWnd :: GetMenu cho một, nếu tôi nhớ chính xác). Ngoài ra một cái gì đó liên quan đến hỗ trợ bánh xe chuột di sản của chúng tôi (trước khi Windows đã tích hợp hỗ trợ bánh xe chuột) bằng cách nào đó đã phá vỡ (tôi chỉ cần loại bỏ các tính năng, vì vậy tôi không bao giờ thực sự tìm ra lý do tại sao đã phá vỡ).

Một số phương pháp ATL (hoặc tham số phương thức) đã thay đổi thành const không phải ban đầu (đã làm hỏng các ghi đè của tôi).

SDK nền tảng mới hơn - hãy cẩn thận nếu bạn đang đặt phiên bản SDK cửa sổ #defines chính xác (chúng tôi không ở tất cả các địa điểm - đã bị câm). Bây giờ bạn có thể xây dựng với các phiên bản mới hơn (Vista/2008) của các cấu trúc Win32. Điều này đã không làm việc tuyệt vời như vậy trên hộp XP của tôi.

STDMETHOD hiện bao gồm __declspec (nothrow) 100% ngay - ngoại trừ điều này đã tìm thấy một số vấn đề trong mã của chúng tôi. Một số giao diện đã được viết như nó sẽ được tiếp xúc thông qua COM, nhưng không bao giờ, đã ném ngoại lệ.

Các IDE có bug nơi breakpoint tàn tật không hiển thị hình tròn rỗng ở bên lề nếu bạn không có điểm break thiết để làm nổi bật toàn bộ dòng (mà tôi nghĩ là mặc định cho VC++, có lẽ ?).

Hầu hết các sự cố này là do các lỗi tinh vi trong mã của chúng tôi hoặc quá tải tích cực của thư viện MFC/ATL. Vì mã của mọi người khác là hoàn hảo, bạn nên ổn thôi;)

-1

Có sự khác biệt về cú pháp mà bạn không thể đơn giản biên dịch lại không? VS sẽ tự động chuyển đổi các tệp .sln và vcproj cho bạn. Phần còn lại chỉ là mã, và trừ khi bạn đang làm một cái gì đó thực sự kỳ lạ, nó chỉ nên biên dịch lại như là.

+1

Và câu trả lời của tôi là xấu ... làm sao? Về cơ bản nó giống như một nửa các câu trả lời khác. –

2

Tại nơi làm việc của mình, chúng tôi đã chuyển đổi dự án C++ lớn từ VS2005 sang VS2008. Không có vấn đề gì cả. Không cần phải nói, bạn chắc chắn vẫn nên giữ một bản sao của dự án cũ chỉ trong trường hợp. :)

Chỉnh sửa: Tôi nên đề cập rằng dự án có nghĩa là độc lập với nền tảng và không có thành phần gui.

0

Gần đây tôi đã chuyển đổi một dự án được viết bằng VC++ 5, mà tôi đã không đề cập trong 10 năm tới VS2008. Tôi vừa tải dự án và để VS2008 chuyển đổi nó. Mọi thứ đều ổn. (dự án bây giờ ở đây: http://www.codeplex.com/Uptime)

1

Nếu dự án của bạn đang sử dụng MFC thì bạn nên biết rằng nó đã có bản cập nhật khá lớn trong năm 2008 có thể phá vỡ mọi thứ. Chủ yếu là các bản cập nhật bảo mật và giao diện người dùng, vì vậy đáng để làm theo ý kiến ​​của tôi.

Xem here cung cấp thông tin tổng quát hơn về những gì đang thay đổi trong VS 2008.

0

Theo kinh nghiệm của chúng tôi, các dự án chỉ chuyển đổi tốt. Thay đổi mã duy nhất mà chúng tôi gặp phải là _MIN và _MAX đã bị xóa - chúng tôi phải thay đổi nó thành std :: min(), v.v.MFC của chúng tôi công cụ biên dịch OK. Đau đầu lớn nhất của chúng tôi là nhận được các phiên bản VS 2008 của các thư viện của bên thứ ba mà chúng tôi đã mua và xây dựng các phiên bản VS 2008 của các gói nguồn mở lớn như tăng cường, OpenSceneGraph và GDAL. Không phải khoa học tên lửa - chỉ là tẻ nhạt. Tôi đã viết một bản tóm tắt ngắn on my blog.

2

Nếu bạn phải hỗ trợ các nền tảng cũ hơn, hãy cẩn thận: VC2008 là phiên bản đầu tiên can't target Win9x or NT4. Công ty của tôi phải gắn bó với VC2005 vì lý do đó.

Các vấn đề liên quan