从 C# 加载C++ Windows 运行时组件时出现异常
本文关键字:异常 组件 运行时 加载 C++ Windows | 更新日期: 2023-09-27 18:30:34
我遇到了一个问题,我的 UWP 应用程序是 C# 的,但它利用了同一解决方案中的 Windows 运行时组件C++ Dll。 当我在调试中运行我的应用程序时,我没有看到任何问题。 但是当我在发布 (x86) 中运行时,我收到以下异常(发生在 VS debbuger 中):
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 目标。
解决方案:创建一个静态库项目,该项目包含公共 DLL 中的所有代码文件,并改为链接到新的静态库。