【问题标题】:Exception when loading C++ Windows Runtime Component from C#从 C# 加载 C++ Windows 运行时组件时出现异常
【发布时间】:2016-01-16 04:28:52
【问题描述】:

我遇到了一个问题,我的 UWP 应用程序使用 C#,但它使用了同一解决方案中的 Windows 运行时组件 C++ Dll。当我在调试中运行我的应用程序时,我看不到任何问题。但是当我在 Release (x86) 中运行时,我得到以下异常(发生在 VS 调试器中):

The specified module could not be found. (Exception from HRESULT: 0x8007007E
at System.StubHelpers.StubHelpers.GetWinRTFactoryObject(IntPtr pCPCMD)
   at CppFunction()
   at CsharpFucntion()
   at System.Threading.Tasks.Task.InnerInvoke()
   at System.Threading.Tasks.Task.Execute()

我的 C++ 组件确实与 oppenssl 链接(我从 microsoft github 页面手动构建)。我已经尝试重建 openssl 组件只是为了看看这是否是问题所在,但它没有帮助。

我还验证了 DLL 和 WINMD 文件存在于 bin\x86\Release\AppX 文件夹中

【问题讨论】:

    标签: c# c++ win-universal-app


    【解决方案1】:

    经过几天的探索,我终于弄清楚了这个问题。我们的团队有多个正在构建的 UWP 应用,并且我们有一些通用的解决方案可以构建可供所有应用使用的 DLL。

    其中一个常见项目是构建非 Windows 运行时 C++ DLL(Windows 通用)。在我的解决方案的 C++ Windows 运行时组件中,我们静态链接到在构建上述 DLL 时创建的 .lib 文件,然后在打包应用程序时,我们将手动包含 DLL。

    由于某种原因,这种方法似乎在大多数目标中都可以正常工作,除了 x86 / Release 目标。

    解决方案:创建一个包含来自通用 DLL 的所有代码文件的静态库项目,并改为链接到新的静态库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-27
      • 1970-01-01
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多