2014-05-01 49 views
1

我想根據它是32位控件還是64位來切換我用於activex控件的GUID。我寧願沒有兩個.rc文件來做到這一點。但是,資源編譯器會忽略BEGIN - END塊內的預處理器定義,並始終默認爲#else節中的Control。請讓我知道,除了擁有兩個不同的資源(.rc)文件之外,是否有更好的方法來完成此操作。在.rc文件中的宏

BEGIN 
#ifdef _Win64 
CONTROL   "",IDC_TCHART1,"{FCB4B50A-E3F1-4174-BD18-54C3B3287258}",WS_TABSTOP,0,15,445,199 
#else 
CONTROL   "",IDC_TCHART1,"{FAB9B41C-87D6-474D-AB7E-F07D78F2422E}",WS_TABSTOP,0,15,445,199 
#endif 
END 

回答

4

我覺得它不承認在編譯器選項項目屬性定義的預處理器符號,你需要將其添加到資源的屬性了。此外,您可以#include包含#define'ed符號的文件。

所以as MSDN says

要爲您的資源標識符定義的符號,使用的#define 指令在頭文件來定義它們。在 資源腳本和您的應用程序源代碼中都包含此標頭。同樣, 通過在資源腳本中包含 Windows.h來定義資源屬性和樣式的值。

RC以特殊方式處理帶有.c和.h擴展名的文件。它 假定具有這些擴展名之一的文件不包含 資源。如果文件具有.c或.h文件擴展名,則RC將忽略除預處理器指令以外的文件中的所有行 。因此, 將包含資源的文件包含在另一個資源腳本 中,從而使該文件包含擴展名,而不是.c或.h。

話雖如此,這是極有可能的是,只要你與Visual Studio資源編輯器修改這個,你就會失去你的變化。

+0

我試過了。我添加了#定義到一個.h文件,幷包括該.h文件,仍然不起作用:( – coolshashi

+4

你解決了後一個問題(VS重寫你的文件)通過創建一個單獨的文件,擴展名爲'.rc2',包含所有並將它包含在你的'rc'文件中,VS會尊重它,對我來說非常有效,我用它來實現使用'VERSIONINFO'資源的自動版本控制。 –

0

爲了通過預處理器定義資源編譯器還必須在項目設置中定義它(配置屬性 - >資源 - >常規)。