为什么我不能在.rc文件中使用预定义的常量?

时间:2015-03-04 23:27:44

标签: c++ visual-studio-2012

我想确保一个人不能混淆我的DLL文件的64位和32位版本。这就是我在项目属性中定义了以下预处理器常量的原因:

image description

在我的.rc文件中,我有以下几行:

#ifdef x64 
  #define MY_PRODUCT_NAME = "My file 64bit"
#else
  #define MY_PRODUCT_NAME = "My file 32bit"
#endif

我想在下面的资源块中使用这些常量:

BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "000904b0"
        BEGIN
            VALUE "CompanyName", "SOMENAME"
            VALUE "FileDescription", "WHAT THIS FILE IS"
            VALUE "FileVersion", "1.0.0.1"
            VALUE "InternalName", "file.dll"
            VALUE "LegalCopyright", "Don't sell it pls"
            VALUE "ProductName", MY_PRODUCT_NAME
        END

在包含MY_PRODUCT_NAME的行上,我收到此编译器错误:

1>  
1>StopThat.rc(58): error RC2133: unexpected value in value data
1>  
1>  
1>StopThat.rc(58): error RC2132: expected VALUE, BLOCK, or END keyword
1>  

这让我很生气,因为那是 exactly what microsoft does in their documentation

我做错了吗?我猜我是,所以它是什么?

2 个答案:

答案 0 :(得分:1)

假设您发布的代码与您尝试编译的代码完全相同,我会说您可能是两个END语句而不是完全作用域,我也从未在#define语句中看到过等号

可以肯定的是,当资源文件出现时我不是专家。

答案 1 :(得分:1)

因为您在宏定义中使用了赋值运算符,所以删除" ="来自您的定义:

#ifdef x64 
  #define MY_PRODUCT_NAME "My file 64bit"
#else
  #define MY_PRODUCT_NAME "My file 32bit"
#endif