WP8 - 通过Windows运行时组件重用本机DLL

时间:2013-07-21 22:00:30

标签: windows-phone-8

我有一个原生的dll,我想在我正在研究的WP8项目中使用。我做了一些研究,并创建了一个C ++ Windows运行时组件(WRC)来包装本机DLL。 WRC项目使用.lib文件,我的WP8应用程序调用WRC项目。

我的解决方案编译得很好,但是当我的应用程序调用本机DLL中的方法时,我得到The specified module could not be found. (Exception from HRESULT: 0x8007007E)异常。

从阅读中看起来似乎没有加载dll。我已将所有相关的dll复制到.exe文件所在的输出目录,也在各个地方复制,但错误不断出现。

如果有人能指出我正确的方向,我将非常感激。此外,如果需要更多信息,我也会发布。

2 个答案:

答案 0 :(得分:2)

DLL必须包含在您的XAP包中。在构建应用程序时,您可以看到在“输出”窗口中处理的内容,它以“Begin Xap packaging”消息开头,然后列出所有添加的文件。运行时错误表明它未包含在内。

当MSBuild无法自行确定依赖关系时,如何确保文件包含在手机包中的指导非常少。它当然不适用于您的DLL,构建系统无法判断它是否不是您解决方案中的项目。在这种情况下,似乎你在最前沿操作:)

但是当我尝试它时,这很有效,通过MSBuild输出,而不是通过实际测试它:Project + Add Existing Item。导航到您的DLL并选择它。在Solution Explorer窗口中选择它,然后在Properties窗口中查找。确保“构建操作”=内容,复制到输出目录=“如果更新则复制”。重建后,您现在将看到该文件已添加到XAP中。哪个应该解决这个特殊错误。可能还有其他人:)

答案 1 :(得分:-1)

Windows桌面或Windows应用商店本机DLL与Windows Phone不是二进制兼容的,即使它们是针对相同的CPU架构构建的。

因此,您需要为Windows Phone工具集重新编译本机DLL。

关于Windows运行时组件:

在Windows Phone上,Windows运行时组件本身就是一个本机DLL(手机不支持.NET)。 Windows运行时组件的二进制文件无法在Windows应用商店应用和Windows Phone应用之间共享。