Phi*_*ord 1 c# winforms pdfium
我已经构建了一个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位版本)会很好。其他,以确保兼容性)。
我已经使用了这种方法。主要思想是确定程序是否在32位或64位环境上运行。这是通过检查指针的大小来完成的。根据此检查的结果,库pdfium.dll是从应用程序路径的x86或x64子目录动态加载的。
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);
Run Code Online (Sandbox Code Playgroud)