2009-07-28 22 views

Trả lời

10

Tôi luôn kiểm tra biểu tượng _MFC_VER đang được xác định.

Đây là số phiên bản của MFC được sử dụng 0x0700 = 7.0

Đó là trong "Predefined Macros" trong MSDN

0

Biểu tượng _AFX thường được định nghĩa cho các dự án MFC.

+0

Tôi nghĩ quá muhc, nhưng khi bật "Sử dụng MFC trong thư viện động" cho dự án Thư viện Win32 (đã được tạo mà không có tùy chọn 'Hỗ trợ MFC'), macro này không được xác định. – peterchen

+0

Như @peterchen đã nói, _AFX không được định nghĩa nếu MFC là tùy chọn thư viện động đang hoạt động, nhưng _AFXDLL thay thế. – Mouze

3

tôi đã kiểm tra trên Visual Studio 2013, trong một dự án ban đầu nhắm mục tiêu chỉ Win32 giao diện điều khiển, vì vậy tôi đã thêm hỗ trợ MFC (không cần sử dụng Trình hướng dẫn dự án) trong lần thứ hai. Sau đây là những phát hiện của tôi:

  • macro _MFC_VER được định nghĩa trong afxver_.h, bao gồm bởi afx.h. Vì vậy, nếu bạn không bao gồm afx.h trực tiếp/gián tiếp trong tệp .cpp của bạn, bạn không có macro _MFC_VER được xác định. Ví dụ: bao gồm trong dự án nguồn .cpp không bao gồm afx.h, tệp sẽ được biên dịch KHÔNG CÓ định nghĩa macro _MFC_VER. Vì vậy, nó vô dụng để thích ứng với mã C++ (một thư viện bên ngoài, ví dụ) để phát hiện việc sử dụng thư viện MFC và tùy chọn hỗ trợ thư viện MFC.

  • Nếu bạn tự bật việc sử dụng MFC (Chọn dự án trong Solution Explorer, hơn click chuột phải, Configuration Properties -> General -> Sử dụng MFC) bạn có hai khả năng:

    • A) chọn "Sử dụng MFC trong một DLL chia sẻ" tùy chọn. Điều này thực sự cập nhật các tham số dòng lệnh thêm định nghĩa của _AFXDLL vào danh sách macro tiền xử lý.
    • B) chọn tùy chọn "Sử dụng MFC trong thư viện tĩnh". Điều này thực sự loại bỏ các _AFXDLL vĩ mô được xác định, nhưng không có định nghĩa vĩ mô được thêm vào, vì vậy không có gì có thể nói với bạn nếu MFC thực sự được sử dụng.

Vì vậy, trong thời gian hoạt động thử nghiệm của tôi, chỉ có chế độ A có thể được sử dụng một cách hiệu quả để hiểu nếu thư viện MFC nêu trên có hoặc không nằm trong dự án dưới tòa nhà.

Tôi duy trì thư viện đa nền tảng C++ hỗ trợ nhiều nền tảng (Mac OSX, WinX, iOS, Unix, Android) và bật MFC với DLL động là cách duy nhất để phát hiện sự hiện diện MFC một cách minh bạch. Ví dụ:

#if defined(_AFXDLL) 
# include <afx.h> 
#endif 

Rõ ràng, bạn có thể thêm định nghĩa macro theo cách thủ công (_AFX) vào danh sách bộ xử lý dự án.

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