在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) 我希望我的 C# 应用程序有条件地运行本机方法,有条件地选择运行 dll 的 x86 或 x64 版本。每当我尝试加载 32 位 dll 时,都会收到以下错误:
Unhandled Exception: System.BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
at <exeName>.MiniDumpMethods.MiniDumpWriteDumpX86(IntPtr hProcess, UInt32 processId, SafeHandle hFile, MINIDUMP_TYPE dumpType, IntPtr expParam, IntPtr userStreamParam, IntPtr callbackParam)
Run Code Online (Sandbox Code Playgroud)
背景上下文:我希望我的二进制文件能够获取给定进程的内存转储。根据进行内存转储的进程是 32 位还是 64 位,它将选择从 x86 或 x64 版本的 dbghelp.dll 运行 MiniDumpwriteDump 方法。
我目前正在执行以下操作:
[SuppressUnmanagedCodeSecurity]
internal static class MiniDumpMethods
{
[DllImport("dbghelp.dll",
EntryPoint = "MiniDumpWriteDump",
CallingConvention = CallingConvention.StdCall,
CharSet = CharSet.Unicode,
ExactSpelling = …Run Code Online (Sandbox Code Playgroud) 我已经构建了一个WinForms应用程序,该应用程序使用PDFium打印PDF文档。我从NuGet安装了PDFium,并按预期在我的项目中创建了两个子文件夹x86和x64,每个子文件夹中都包含相关版本的pdfium.dll。我的应用程序的目标平台设置为Any CPU。
当我在Windows 10 64位计算机上以调试方式运行应用程序时,它可以完美运行。但是,当我发布该应用程序并将其真正安装在同一台计算机上时,PDFium抛出异常:
System.BadImageFormatException:试图加载格式错误的程序。(来自HRESULT的异常:0x8007000B)
经过研究后,我将应用程序的目标平台更改为x86,并从项目中删除了x64子文件夹。现在,该应用程序在发行后可以正常运行,因此问题得以解决。
但是,我想知道是否有一种方法可以使我的应用程序正常工作,以便使用适用于目标计算机的PDFium版本来支持x86和x64。如果能在支持它的机器上安装64位版本(这是我们组织中的大多数人,但我觉得如果必须选择32位版本,则我应该使用32位版本)会很好。其他,以确保兼容性)。