2009-10-02 57 views
8

Có một số từ khóa tiền xử lý để sử dụng để truy cập FILEVERSION được định nghĩa trong tệp .rc của tôi tại thời gian biên dịch không?Lấy FILEVERSION từ Visual C++ Resource File

Tôi không thực sự muốn thêm mã phụ để đọc thông tin tệp từ chính sản phẩm được biên dịch.

Trả lời

8

Trình tiền xử lý cũng chạy trên tệp .RC. Xác định dữ liệu được chia sẻ trong tiêu đề được bao gồm bởi cả .RC và mã nguồn của bạn.

tức là, trong foo.h:

#define MY_PRODUCT_NAME Foo 

Sau đó, trong foo.rc:

#include "foo.h" 

VS_VERSION_INFO VERSIONINFO 
    // Many lines omitted 
    VALUE "ProductName", MY_PRODUCT_NAME 

Sau đó, trong Foo.cpp:

#include "foo.h" 

cout << MY_PRODUCT_NAME; 
+0

Ý tưởng hay, nhưng trong tệp RC nó có một chuỗi thông tin cũng có thông tin phiên bản (ở định dạng hơi khác). Bất kỳ cách nào để chỉ đơn giản là truy cập các giá trị tập tin RC hơn là tái xác định chúng và giữ chúng ở một nơi chung? – known

+0

Không có gì mà tôi biết - rc.exe độc ​​lập với cl.exe. – Michael

+0

Khi bạn thay đổi hộp thoại hoặc bất kỳ thứ gì bạn đang làm việc, tệp .rc mới sẽ được tạo và tệp cũ sẽ bị ghi đè. Vì vậy, "#include" foo.h "' sẽ không còn ở đó nữa. Đây không phải là giải pháp tốt. – LihO

2

Giải pháp của tôi cho vấn đề này rất đơn giản và hoạt động tốt và không bị xóa bởi trình chỉnh sửa tài nguyên. 1. Di chuyển toàn bộ phần VS_VERSION_INFO vào tệp .RC2 của bạn. 2. Thay thế tất cả các số phiên bản và chuỗi bằng các giá trị bạn # define trong tệp version.h mới. 3. Thêm #include "version.h" vào tệp .RC2 của bạn. Bây giờ bạn cũng có thể bao gồm version.h trong các tệp .CPP khác và sử dụng các giá trị #define trong mã của bạn, ví dụ để hiển thị tài nguyên phiên bản của ứng dụng trong hộp thoại.

+1

Microsoft cũng đề xuất giải pháp này (mặc dù nó không phải là rất dễ dàng để google): http://support.microsoft.com/kb/237870/en-us – Steed

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