首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >允许PDFium支持x86和x64

允许PDFium支持x86和x64
EN

Stack Overflow用户
提问于 2017-03-27 12:35:29
回答 2查看 4.2K关注 0票数 3

我已经构建了一个WinForms应用程序,它使用PDFium打印PDF文档。我从NuGet安装了NuGet,它在我的项目中创建了两个子文件夹-- x86和x64 --这两个子文件夹都有相应版本的pdfium.dll。我的应用程序的目标平台被设置为任意CPU。

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

System.BadImageFormatException:尝试加载格式不正确的程序。(HRESULT例外: 0x8007000B)

在进行了一些研究之后,我将应用程序的目标平台更改为x86,并从我的项目中删除了x64子文件夹。现在应用程序在发布后工作得很好,所以问题得到了解决。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-27 13:47:03

事实证明,这与PDFium无关。在我安装发布的应用程序期间使用的脚本中,两个版本的pdfium.dll都被设置为发布到应用程序的根文件夹,而不是名为x32和x64的子文件夹。因此,在安装过程中,dll的x32版本将覆盖x64版本,从而导致应用程序根本没有x64 dll。

票数 1
EN

Stack Overflow用户

发布于 2017-03-27 12:42:58

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

代码语言:javascript
运行
复制
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);
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43046641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档