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

时间:2016-01-14 15:15:06

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

我遇到的问题是我的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组件只是为了看看是不是问题,但它没有帮助。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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