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

问题描述 投票:2回答:1

最近,我一直在试图让一个DLL具有不同的InternalName和OriginalFilename,这取决于它被编译为什么平台。如果DLL设置为Release | x64,则它应该有一个名称,如果设置为Release | x86,则应该有另一个名称。我只使用了两个不同的项目,但觉得创建一个ifdef更容易。问题是无论我做什么,InternalName和OriginalFilename总是最终成为x86名称。

下面我从我的Resource.h文件中有一个小剪辑,我存储了ifdef。

下面的代码片段来自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

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

c++ visual-studio winapi conditional-compilation resource-files
1个回答
3
投票

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

您必须为需要它的每个配置明确地将WIN64定义添加到.RC文件的选项中。

© www.soinside.com 2019 - 2024. All rights reserved.