2009-10-02 167 views

回答

8

預處理器也在.RC文件上運行。在.RC和源代碼包含的標題中定義共享數據。

即foo.h中:

#define MY_PRODUCT_NAME Foo 

然後在foo.rc:

#include "foo.h" 

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

然後在Foo.cpp中:

#include "foo.h" 

cout << MY_PRODUCT_NAME; 
+0

好主意,但在RC文件中它有一個字符串信息塊,它也具有版本信息(以稍微不同的格式)。任何方式來簡單地訪問RC文件的值,而不是重新定義它們並將它們保存在一個共同的地方? – known 2009-10-02 01:18:01

+0

沒有我知道的 - rc.exe獨立於cl.exe。 – Michael 2009-10-02 01:26:21

+0

當您更改對話框或您正在處理的任何內容時,會生成新的.rc文件並覆蓋舊的.rc文件。所以這個'#include「foo.h」'不會再存在了。這不是一個好的解決方案。 – LihO 2012-02-02 08:31:54

2

我解決這個問題很簡單並且運行良好,並且不會被資源編輯器刪除。 1.將整個VS_VERSION_INFO節移到.RC2文件中。 2.將所有版本號和字符串替換爲您在新版本.h文件中定義的值。 3.將#include「version.h」添加到您的.RC2文件。 現在,您還可以在其他.CPP文件中包含version.h,並在代碼中使用#define值,例如在對話框中顯示應用程序的版本資源。

+1

微軟也建議這個解決方案(雖然它不是很容易谷歌):http://support.microsoft.com/kb/237870/en-us – Steed 2013-03-05 11:28:20