【问题标题】:C# Preprocessor for 32BitProcess running on 64BitOperatingSystem在 64BitOperatingSystem 上运行的 32BitProcess 的 C# 预处理器
【发布时间】:2026-01-08 09:05:02
【问题描述】:

如何使用 C# 预处理器指令找到在 64BitOperatingSystem 上运行的 32BitProcess。

有关更多信息,我需要声明 dll 名称(基于位)以访问 extern 函数。我需要使用预处理器方式的以下代码。

public String WABDll; 
if (64Bit)
{
    WABDll = "Win-64.dll";
}
else if(32Bit Process on 64BitOS)
{
   WABDll = "Win-32on64.dll";
}
else if(32Bit)
{
    WABDll = "Win-32.dll";
}

我尝试了以下方法

#if _64BIT
    public const String WABDll = "Win-64.dll";
#elif _32BIT
    public const String WABDll = "Win-32on64.dll";
#else
    public const String WABDll = "Win-32.dll";
#endif

任何建议。

【问题讨论】:

    标签: c#


    【解决方案1】:

    不要对预处理器指令执行此操作;使用the Environment class 确定运行时的环境。 Is64BitOperatingSystemIs64BitProcess 属性应该为您提供所需的信息。

    【讨论】:

    • if (System.Environment.Is64BitOperatingSystem) { if (System.Environment.Is64BitProcess) { } else { } } else { } 我已经尝试过这种方式。但我在加载 DLLImport 时需要它预处理器。
    • @BrittoRaj - 但在编译时,您不知道您的代码将在哪台机器上运行。编写两个单独的 DLLImports 并决定(根据这个答案)在运行时调用哪一个。
    【解决方案2】:

    你无法解决这个问题:

    else if(32Bit Process on 64BitOS)
    {
       WABDll = "Win-32on64.dll";
    }
    

    编译时间,因为编译器事先并不知道程序将在哪里运行。 我可以建议您创建更多解决方案“paltform”,声明一些自定义编译器标志并相应地使用它们。当然,您需要知道哪个可执行文件必须在哪个平台上运行的部署时间。

    【讨论】:

    • 我以场景为例。
    • 这并没有改变你在编译时无法知道这一点的事实
    最近更新 更多