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?
Trả lời
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;)
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à.
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. –
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.
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)
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.
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.
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 đó.
- 1. Tôi nên biết gì khi chuyển từ MIPS sang x86?
- 2. Đối với nhà phát triển C++, có đáng để chuyển từ VS2005 sang VS2008 không?
- 3. TimeZoneInfo.ConvertTime không chuyển đổi bất cứ điều gì
- 4. Tôi có nên chuyển đổi từ MooTools sang jQuery không?
- 5. Chuyển đổi bất cứ điều gì đó không phải là một số để trống
- 6. Ưu điểm của VS2008 so với VS2005 đối với phát triển C++ là gì?
- 7. Những điều cần lưu ý khi di chuyển từ VS2008 sang VS2010
- 8. Người dùng Django nên biết gì khi di chuyển từ MySQL sang PostgreSQL?
- 9. JUnitCore.runClasses không in bất cứ điều gì
- 10. Bất cứ điều gì giống như C# params trong c + +?
- 11. Chương trình OpenCV/C++ chậm hơn so với chương trình của nó, tôi nên làm gì?
- 12. Không nhận lại bất cứ điều gì từ sqlsrv_num_rows
- 13. Templates chấp nhận "bất cứ điều gì" trong C++
- 14. Chuyển đổi chương trình từ QBasic sang Python
- 15. Làm thế nào để chuyển đổi .csr sang .cer (hoặc bất cứ điều gì có thể sử dụng trên Windows)
- 16. Java - Chương trình đệ quy - Chuyển đổi số cơ sở 10 thành bất kỳ Căn cứ
- 17. Tôi muốn chuyển sang lập trình µC, nhưng tôi hoàn toàn không biết bắt đầu từ đâu từ
- 18. Bất cứ ai biết gì về OLAP Internals?
- 19. Regular Expression phù hợp với bất cứ điều gì sau khi một từ
- 20. Lập trình chụp vùng X11 bằng ffmpeg trong C/bất cứ điều gì
- 21. Nên -ealloc làm bất cứ điều gì khác hơn là bộ nhớ phát hành?
- 22. VS2008 nhị phân 3x lần chậm hơn so với VS2005?
- 23. Java applet không hiển thị bất cứ điều gì
- 24. Chuyển nhiều mẩu dữ liệu từ chương trình Python sang C
- 25. Chương trình biên dịch chạy chậm hơn MUCH sau khi tôi chuyển sang VS 2010
- 26. là bất cứ ai làm bất cứ điều gì về 2038 time_t lỗi?
- 27. Tôi có nên chuyển từ Lời thề sang Mocha không?
- 28. Chuyển đổi từ C++ sang Java
- 29. Cách tốt nhất để biết một chương trình Python có gì để đọc từ stdin không?
- 30. làm thế nào để lười biếng bất cứ điều gì
Gắn thẻ VC++ thành VisualC++, cố gắng để SO chuẩn hóa trên một thẻ ... – Aardvark
'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