2015-01-21 17 views
10

Tôi có một dự án C++ tham chiếu nhiều dự án/thư viện khác. Đây là một ứng dụng được tạo ra từ nhiều năm trước. Mỗi năm một lần nó được cập nhật và một phiên bản mới được thực hiện. Tôi đã sử dụng Visual Studio 6 để cập nhật và xây dựng các phiên bản mới của ứng dụng này trong nhiều năm nay mà không gặp bất kỳ sự cố nào.MFC không hỗ trợ WINVER nhỏ hơn 0x0501

Tôi đang cố gắng chuyển sang Visual Studio 10 (và bây giờ là VS2013). Ban đầu tôi chạy vào một số cảnh báo và lỗi do sự cố tương thích giữa các phiên bản VS. Tôi đã có thể chăm sóc nhiều nhất. Tuy nhiên, tôi vẫn hơi bối rối bởi các lỗi sau:

error C1189: #error : MFC does not support WINVER less than 0x0501. Please change the definition of WINVER in your project properties or precompiled header. C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxv_w32.h

Lỗi này xảy ra trong một vài trong số các thư viện dự án tham chiếu. Tôi đã kiểm tra các thư viện dự án trong câu hỏi và tôi không thể tìm thấy bất kỳ tham chiếu đến WINVER.

Tôi đã tìm kiếm trên Internet để biết thông tin về điều này và tìm thấy một số chủ đề nhưng không có gì cụ thể cho vấn đề của tôi. Ai đó có thể làm sáng tỏ điều gì có thể xảy ra ở đây?

Xin cảm ơn trước. LA

+0

Nếu bạn sử dụng 'stdafx.h', bạn có thể thêm' #define WINVER 0x0501' vào đầu tệp đó. – wimh

Trả lời

22

Tất cả ứng dụng MFC xác định giá trị macro WINVER ở đâu đó nếu bạn không tự xác định. Tôi cho rằng MS đã loại bỏ định nghĩa theo mặc định trên các tệp tiêu đề của chính nó và bây giờ bắt buộc phải xác định rõ ràng nó.

Vì vậy, để giải quyết vấn đề của bạn, hãy đặt #define trong tùy chọn trình biên dịch 'tiền xử lý' của bạn hoặc ở đầu đầu trang được biên dịch trước của bạn (ví dụ: stdafx.h).

Lưu ý 0x501 là hỗ trợ Windows XP. 0x600 là Vista, 0x601 là Windows 7 - và tôi buồn khi nhớ điều đó!

+4

Tôi đã có một vấn đề tương tự, và không có số lượng '# define' cố định nó. Bật ra, trong Visual Studio 2013, nếu bạn nhấp chuột phải vào dự án của bạn, chọn thuộc tính, sau đó trong tùy chọn 'Thuộc tính cấu hình -> C/C++ -> Tất cả tùy chọn', có một'/DWINVER' ở đó. – thejinx0r

+0

@ thejinx0r Điều đó có thể áp dụng cho tất cả các phiên bản của VS, thiết lập định nghĩa trong các tùy chọn trình biên dịch là không có gì mới, chỉ cần nhìn thấy bất kỳ makefile. – gbjbaanb

+0

@gibnab Tôi hoàn toàn đồng ý với tuyên bố của bạn. Tôi chỉ muốn đề cập rằng '# define' đôi khi được chôn trong các tùy chọn ở đâu đó mà bạn không mong đợi. Hơn nữa, '#define WINVER' trong mã không tăng bất kỳ lỗi định nghĩa lại – thejinx0r

4

Tôi đã nhận lỗi cùng, trên Windows 7 với Visual Studio 2013.

Trong trường hợp của tôi dự án của tôi đã có một tập tin nguồn với tên stdafx.h, bên trong tập tin đó đã có

#ifndef _WIN32_WINNT 
#define _WIN32_WINNT 0x0500 
#endif 

tôi đã thay đổi nó đến

#ifndef _WIN32_WINNT 
#define _WIN32_WINNT 0x601 
#endif 

và lỗi biến mất.

-1

Tôi đã nhận lỗi cùng, trên WIN 7 VS 2013. Trong trường hợp của tôi dự án của tôi đã có một tập tin nguồn với tên stdafx.h, bên trong tập tin đó đã có

#ifndef WINVER 
#define WINVER 0x0400 
#endif 

tôi đã thay đổi nó để

#ifndef WINVER 
#define WINVER 0x601 
#endif 

và lỗi biến mất.

+0

Đây gần như là một bản sao và dán câu trả lời của @Alessandro Jacopson với một vài ký tự thay đổi. –

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