#ifdef x64不适用于Windows资源文件

时间:2019-04-01 15:33:45

标签: c++ visual-studio winapi conditional-compilation resource-files

最近,我一直在尝试根据其编译平台将DLL具有不同的InternalName和OriginalFilename。如果DLL设置为Release | x64,则应使用一个名称,如果设置为Release | x86,则应使用另一个名称。我曾经只有两个不同的项目,但是觉得创建一个ifdef比较容易。问题是不管我做什么,InternalName和OriginalFilename总是以x86名称结尾。

下面,我在存储ifdef的Resource.h文件中有一个小片段。

下面的代码段来自定义该详细信息的dlls .rc文件。

#ifdef WIN64
    // 64 bit windows
    #define DLLNAME                     "MyDLL.dll"
#else
    // 32 bit windows
    #define DLLNAME                     "MyDLL_WIN32.dll"
#endif // _WIN64 or _WIN32
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "CompanyName", "Software Company Inc."
            VALUE "FileDescription", "Some DLL"
            VALUE "FileVersion", "1.0.0.1"
            VALUE "InternalName", DLLNAME
            VALUE "LegalCopyright", "Copyright (C) 2019.  All rights reserved."
            VALUE "OriginalFilename", DLLNAME
            VALUE "ProductName", "Some DLL"
            VALUE "ProductVersion", "1.0.0.1"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END

这是我设置的预处理程序定义。

Preprosseor for X64

Preprosseor for X86

任何对我做错事的帮助都会很棒。

1 个答案:

答案 0 :(得分:3)

如果检查.RC文件的属性,您会发现它不继承用于C ++编译器的预处理器定义。

对于每种需要的配置,您都必须在.RC文件的选项中显式添加Seed Source定义。