【问题标题】:Diagnosing DllNotFoundException when using a native Library from .net UWP app从 .net UWP 应用程序使用本机库时诊断 DllNotFoundException
【发布时间】:2017-02-04 10:35:18
【问题描述】:

我在进行 Windows 开发方面的经验很少,并且遇到了一些问题。我有一个用 C++ 编写的私有第三方库。我无权访问源代码,并且该库有许多第三方依赖项。问题是我想通过 PInvoke 从 CSharp UWP 应用程序使用这个应用程序,但到目前为止我遇到了麻烦。我收到 DLLNotFoundException,我知道如果无法加载库或无法加载其任何依赖项,可能会导致该异常。

到目前为止我已经尝试过: 为了缩小问题范围,我尝试使用常规的 C# 控制台应用程序(Windows 表单也可以)。从这个启动项目中,我可以按预期调用库上的函数。

使用 CSharp UWP 测试应用程序: 我已经编译了一个简单的 c++ 测试库,它将两个数字相加并使用它来确保我至少正确地包含了主 DLL。这对我来说很好。我还读到,对于 UWP 应用程序,必须将 DLL 直接添加到项目中并标记为内容,以便它们包含在 UWP 包中。我已经这样做了,并确认非 UWP 控制台应用程序与相同的 DLL。

所以我的问题是,如何在相同的配置下,Windows 控制台/表单应用程序可以与库一起使用 - 但 UWP 应用程序不能。这是因为非 UWP 应用程序可以访问比 UWP 应用程序更多的系统 DLL 还是什么?如果您至少可以帮助我缩小可能的问题范围,那就太好了。如果有办法找出 UWP 应用无法加载哪些库,那就太好了 - 即使非 UWP 应用可以正常加载所有内容。

我正在使用的 UWP 应用程序尚未部署到远程设备。我在本地调试应用程序时遇到问题。注意 - 我无法共享我正在使用的库 - 所以发布测试应用程序是不可能的:(。

感谢您的帮助

【问题讨论】:

    标签: .net windows uwp pinvoke native


    【解决方案1】:

    哦,我找到了这个特定问题的答案。问题是我还必须复制通过环境变量路径链接的 DLL。我忘记了一些 OpenCV DLL。

    还有用于跟踪此问题的有用工具: 在我的情况下,我的库从 Windows 库中运行,因此我可以使用“listdll”工具,该工具允许您列出在运行时由特定进程加载的 DLL。然后我在应用程序的 UWP 版本上运行它,在断点被命中后,然后可以大致了解哪些 DLL 没有加载。我将它与“pestudio”结合使用,可让您查看 .exe 或 DLL 所需的依赖项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-03
      相关资源
      最近更新 更多