gpt4 book ai didi

c# - 允许 PDFium 支持 x86 和 x64

转载 作者:太空宇宙 更新时间:2023-11-03 19:47:56 28 4
gpt4 key购买 nike

我构建了一个 WinForms 应用程序,它使用 PDFium 来打印 PDF 文档。我从 NuGet 安装了 PDFium,它在我的项目中创建了两个子文件夹 - x86 和 x64 - 正如预期的那样,每个子文件夹都包含相关版本的 pdfium.dll。我的应用程序的目标平台设置为任何 CPU

当我在我的 Windows 10 64 位机器上调试运行应用程序时,它运行良好。但是,当我发布应用程序并在同一台计算机上真正安装它时,PDFium 抛出异常:

System.BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)

经过一些研究后,我将应用程序的目标平台更改为 x86,并从我的项目中删除了 x64 子文件夹。应用发布后运行正常,问题解决。

但是,我想知道是否有一种方法可以让我的应用程序工作,以便它支持 x86 和 x64,使用适合目标计算机的 PDFium 版本。如果它能在可以支持它的机器上安装 64 位版本就好了(这是我们组织中的大多数机器,但我觉得如果我必须选择一个或另一个,以确保兼容性)。

最佳答案

我用过这种方法。主要思想是确定程序是在 32 位还是 64 位环境中运行。这是通过检查指针的大小来完成的。根据此检查的结果,库 pdfium.dll 从应用程序路径的 x86x64 子目录动态加载。

private static bool TryLoadNativeLibrary(string path)
{
if (path == null)
return false;

path = Path.Combine(path, IntPtr.Size == 4 ? "x86" : "x64");

path = Path.Combine(path, "pdfium.dll");

return File.Exists(path) && LoadLibrary(path) != IntPtr.Zero;
}

[DllImport("kernel32", SetLastError = true, CharSet = CharSet.Ansi)]
private static extern IntPtr LoadLibrary([MarshalAs(UnmanagedType.LPStr)] string lpFileName);

关于c# - 允许 PDFium 支持 x86 和 x64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43046641/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com