繁体   English   中英

C#中用于基于平台导入的预处理器指令

[英]Preprocessor directive in C# for importing based on platform

根据可执行文件是 64 位还是 32 位,在 c# 中寻找用于导入 dll 的预处理器指令:

#if WIN64
[DllImport("ZLIB64.dll", CallingConvention=CallingConvention.Cdecl)]
#else
[DllImport("ZLIB32.dll", CallingConvention=CallingConvention.Cdecl)]

这是您需要做的。

首先,进入Project-><project name> Properties...并进入 Build 选项卡。

在那里,在标记为“条件编译符号”的文本框中,为您的 x86 平台添加WIN32 (可在对话框顶部选择)和为您的 x64 平台添加WIN64 然后保存。

请注意,如果您有一个用于“AnyCPU”的平台,您可能希望完全删除该平台,因为它不安全。

然后,进入源代码,并写下:

#if WIN64
    [DllImport("ZLIB64.dll", CallingConvention=CallingConvention.Cdecl)]
#else
    [DllImport("ZLIB32.dll", CallingConvention=CallingConvention.Cdecl)]
#endif

请注意,当您查看源代码时,其中一行看起来像是已被注释掉,因为整行都是灰色字体。 这条线路是“其他平台”的线路。 如果您在工具栏中选择平台,您会注意到语法颜色也是如此。

当然,在重新阅读我的答案后,我注意到您实际上并不需要将 WIN32 放入条件符号列表中,因为它没有被使用,但是在其他地方在 WIN32 而不是 64 上执行 #if 可能会很有用.

您必须在项目属性的 Build 选项卡中为每个目标平台添加条件编译符号。 只需为给定平台添加一个符号,由构建表单顶部的平台下拉菜单确定。 更改平台将允许您添加仅适用于该平台构建的不同符号。

卸载并编辑 .csproj 文件,添加:

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
    <DefineConstants>WIN64;$(DefineConstants)</DefineConstants>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
    <DefineConstants>WIN64;$(DefineConstants)</DefineConstants>
  </PropertyGroup>

采用:

#if WIN64
...
#endif

问候

我不知道内置任何东西。 但是,定义自定义编译常量很简单。 如果您使用 Visual Studio,请使用配置管理器为 32 位和 64 位版本创建不同的构建配置。 然后打开项目属性并转到 Build 选项卡并在每个构建配置的条件编译符号文本框中输入一个描述性名称。 然后就可以在代码中引用编译常量了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM