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

use*_*917 35 c#

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

#if WIN64
[DllImport("ZLIB64.dll", CallingConvention=CallingConvention.Cdecl)]
#else
[DllImport("ZLIB32.dll", CallingConvention=CallingConvention.Cdecl)]
Run Code Online (Sandbox Code Playgroud)

ang*_*son 49

这是你需要做的.

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

在那里,在标有"条件编译符号"的文本框中,WIN32为您的x86平台(可在对话框顶部选择)和WIN64x64平台添加.然后保存.

请注意,如果您有一个"AnyCPU",您可能想要完全删除该平台,因为它不安全.

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

#if WIN64
    [DllImport("ZLIB64.dll", CallingConvention=CallingConvention.Cdecl)]
#else
    [DllImport("ZLIB32.dll", CallingConvention=CallingConvention.Cdecl)]
#endif
Run Code Online (Sandbox Code Playgroud)

请注意,当您查看源时,其中一行看起来已被注释掉,因为整行是灰色字体.这条线是"其他平台"的一条线.如果您在工具栏中选择平台,您会注意到语法着色如下.

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

  • @StefanSteiger 那可能是,但这是我在 2009 年留下的答案。如果您在 2009 年将 dll 作为 dll 导入加载到 .NET 中,那么您使用的是 Windows。至于“平台”,如果那是错误的词,那么对于 32 位和 64 位来说,我几乎不是唯一的一个。 (2认同)

Ed *_* S. 5

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


Mar*_*son 5

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

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

使用:

#if WIN64
...
#endif
Run Code Online (Sandbox Code Playgroud)

问候