相关疑难解决方法(0)

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)

c#

35
推荐指数
3
解决办法
2万
查看次数

在64位进程中加载​​32位dll

我希望我的 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)

c# windows dll 32bit-64bit .net-4.5

3
推荐指数
1
解决办法
6018
查看次数

允许PDFium支持x86和x64

我已经构建了一个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位版本)会很好。其他,以确保兼容性)。

c# winforms pdfium

1
推荐指数
1
解决办法
1746
查看次数

标签 统计

c# ×3

.net-4.5 ×1

32bit-64bit ×1

dll ×1

pdfium ×1

windows ×1

winforms ×1