使用Visual C ++创建的WinRT DLL不会加载到Windows应用商店应用中

时间:2012-12-28 06:51:45

标签: c# c++ visual-studio-2012 windows-8 windows-runtime

我正在使用Visual Studio 2012编写Windows 8商店应用程序。主应用程序是XAML / C#应用程序,但它也使用使用C ++ / CX编写的WinRT组件。对于WinRT组件,我使用的是“新建项目”对话框中名为“DLL(Windows应用商店应用)”的VS项目模板。有了这个项目后,我将其更改为包含一个带有单个ref类的命名空间。我的C#项目包含对这个C ++项目的引用。

但是,当我尝试运行我的应用程序时,C#代码会在尝试实例化/激活C ++ ref类时抛出异常。我甚至在MSDN样本上看到了几个这方面的工作示例。我已经验证WinRT组件DLL和winmd文件已正确复制到最终的应用程序包中,并且还使用WinRT类的正确注册信息正确更新了应用程序的AppxManifest.xml。但它仍然失败。

我不知道出了什么问题。我该如何解决这个错误?

1 个答案:

答案 0 :(得分:2)

Windows运行时组件二进制文件需要具有以下两个导出:     DllCanUnloadNow     DllGetActivationFactory

当您使用VS项目模板“DLL(Windows应用商店应用)”时,您的项目没有定义必需的宏,导致编译器将上述两个导出放在二进制文件中。在项目设置下,您会注意到宏集是_WINDLL。您需要将其更改为_WINRT_DLL。

或者,使用C ++ / CX创建WinRT组件的正确方法是在Visual C ++下使用名为“Windows Runtime Component”的VS项目模板 - > Windows应用商店。使用它将创建一个项目,该项目已使用正确的项目设置等正确设置,以创建正确的WinRT二进制文件。