c# - 从 C# 加载 C++ Windows 运行时组件时出现异常

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

我遇到了一个问题,我的 UWP 应用程序在 C# 中,但它利用了同一解决方案中的 Windows 运行时组件 C++ Dll。当我在 Debug 中运行我的应用程序时,我没有发现任何问题。但是当我在 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 文件夹中

最佳答案

经过几天的摸索,我终于弄明白了这个问题。我们的团队有多个我们正在构建的 UWP 应用程序,我们有一些构建 DLL 的通用解决方案,供所有应用程序使用。

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

出于某种原因,除了 x86/Release 目标之外,此方法似乎在大多数目标中都能正常工作。

解决方案:创建一个包含公共(public) DLL 中所有代码文件的静态库项目,并改为链接到新的静态库。

关于c# - 从 C# 加载 C++ Windows 运行时组件时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34793017/

相关文章:

c# - 如何通过使用异步方法加载结果来在 Windows 8.1 中使用 SearchBox

c# - 平台特定项目的 XAML 中未正确引用 Windows 通用应用程序共享库代码

c# - .NET/C# 中是否内置了用于在对象之间复制值的内容?

c++ - __cxa_atexit() 和 atexit() 有什么区别

c++ - 使用 clang 时需要自己安装所有头文件和库吗?

win-universal-app - Windows 10 UWP 中的电话调用

C#。有可能有一个带有基类型约束的静态泛型类,它有一个带有进一步基类型约束的方法

c# - 如何模拟 System.DirectoryServices.SearchResult?

c# - 十六进制字符串的运行长度编码,包括换行符

尝试编译 gstreamer 应用程序时 #include <anyfile.h> 的 C++ 问题