繁体   English   中英

从C#加载C ++ Windows运行时组件时发生异常

[英]Exception when loading C++ Windows Runtime Component from C#

我遇到一个问题,其中我的UWP应用程序使用C#,但是它利用了同一解决方案中的Windows运行时组件C ++ Dll。 当我在Debug中运行我的应用程序时,我看不到任何问题。 但是,当我在Release(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组件,只是为了查看是否是问题所在,但这没有帮助。

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

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

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

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

解决方案:创建一个包含来自公共DLL的所有代码文件的静态库项目,然后链接到新的静态库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM