【发布时间】:2017-08-20 04:11:17
【问题描述】:
我已经构建了一个使用 PDFium 打印 PDF 文档的 WinForms 应用程序。我从 NuGet 安装了 PDFium,它在我的项目中创建了两个子文件夹——x86 和 x64——正如预期的那样,每个子文件夹里面都有相关版本的 pdfium.dll。我的应用程序的目标平台设置为 Any CPU。
当我在我的 Windows 10 64 位机器上调试运行应用程序时,它运行良好。但是,当我发布应用程序并将其安装在同一台计算机上时,PDFium 会引发异常:
System.BadImageFormatException:尝试加载格式不正确的程序。 (HRESULT 异常:0x8007000B)
经过一番研究,我将应用程序的目标平台更改为 x86,并从我的项目中删除了 x64 子文件夹。现在应用发布后可以正常运行,问题就解决了。
但是,我想知道是否有一种方法可以让我的应用程序工作,以便它同时支持 x86 和 x64,并为目标计算机使用适当版本的 PDFium。如果它在可以支持它的机器上安装 64 位版本会很好(这是我们组织中的大多数,但我觉得如果我必须选择一个或另一个,以确保兼容性)。
【问题讨论】:
-
通过查看库(至少是较新的),如果您保留它建议的目录结构(两个子文件夹,x86 和 x64),它应该在您调用 @987654324 时正确加载所需的版本@
-
我没有调用 PdfCommon.Initialize()。我想知道你是否在看与我不同的图书馆?我指的是这个项目github.com/pvginkel/PdfiumViewer。我看到 Patagames 有一个名称相似的名称,看起来相关但不相同。或者我可能完全糊涂了。
-
我在看this。但即使在 github 上,in this lines 也有对 x86/x64 的处理,这正是 rboe 发布的代码
-
您是否安装在非 ASCII 字符的文件夹中?因为编写该代码的人应该接受关于 Unicode 的速成课程……他使用的是 Ansi 版本的 LoadLibrary 而不是 Unicode 版本。
-
@xanatos 不,我将它安装在没有非 ascii 字符的 Program Files 的子文件夹中。但是,您的问题使我找到了解决此问题的方法,因为在检查安装应用程序的路径时,我注意到 pdfium.dll 文件位于已安装应用程序文件夹的根目录中,而不是 x64 子文件夹。在安装过程中,我的脚本用 x32 版本覆盖了 x64 版本的 pdfium.dll。