【发布时间】:2019-12-19 06:13:40
【问题描述】:
我正在为 Pdfium 库 (pdfium.dll) 构建 UWP 查看器。 pdfium.dll 是一个 C++ 类库。 在我的 Visual Studio 解决方案中,我有两个 UWP 项目。 First Project(PdfiumViewer) 是一个 UWP 类库,它从 pdfium.dll 导入函数并创建用户控件。 例如:
[DllImport("pdfium.dll")]
public static extern void FPDF_AddRef();
第二个项目(PdfiumViewer.Demo)是一个 UWP 空白应用程序,我在这里引用了第一个项目,以便我可以在这个项目中使用它的用户控件。我将 pdfium.dll 包含在我的第二个项目的 bin 文件夹中。但是当我运行程序时,我得到一个异常说“无法加载 pdfium.dll”。
现有的类似查看器是为 .Net Windows 窗体和 WPF 应用程序开发的。
我尝试通过右键单击参考 ->“添加参考”来添加 pdfium.dll 作为参考。在所有这些情况下(.Net WinForm、.Net WPF、UWP),添加它给了我一个错误。 (错误:无法添加对 ....\pdfium.dll 的引用。请确保该文件可访问,并且它是有效的程序集或 COM 组件)
我以类似的方式将 pdfium.dll 添加到 .Net WinForm 和 .Net WPF 中(添加到 bin 文件夹中)并运行它们。两种类型的应用程序查看器都运行良好。
我的问题: 由于 UWP 应用程序运行在沙箱中,是否有特殊位置可以添加此 dll(pdfium.dll)?
注意:我尝试将文件添加到不同的位置。 (在 APPX 文件夹内、在 bin\Debug 文件夹内、在 bin\Debug\x64 内等)
【问题讨论】:
-
我发现 pdfium.dll 需要在 APPX/x64 文件夹中。然而我得到一个异常说“System.DllNotFoundException:无法加载 pdfium.dll 或其依赖项之一。找不到指定的模块。”
-
请将你的dll复制到项目文件夹,并将类型设置为内容。
-
我使用断点调试代码,发现 LoadLibrary(path) 返回了 IntPtr.Zero。 File.Exists(path) 返回 true。有人熟悉 pdfium 库吗?是否可以在 UWP 环境中使用该 DLL?