在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可能会很有用. .
您必须在"项目"选项卡的项目属性中为每个目标平台添加条件编译符号.只需为Build表单顶部的Platform下拉列表确定给定Platform的符号.更改平台将允许您添加仅适用于该平台的构建的不同符号.
卸载并编辑.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)
问候