我正在使用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。但它仍然失败。
我不知道出了什么问题。我该如何解决这个错误?
答案 0 :(得分:2)
Windows运行时组件二进制文件需要具有以下两个导出: DllCanUnloadNow DllGetActivationFactory
当您使用VS项目模板“DLL(Windows应用商店应用)”时,您的项目没有定义必需的宏,导致编译器将上述两个导出放在二进制文件中。在项目设置下,您会注意到宏集是_WINDLL。您需要将其更改为_WINRT_DLL。
或者,使用C ++ / CX创建WinRT组件的正确方法是在Visual C ++下使用名为“Windows Runtime Component”的VS项目模板 - > Windows应用商店。使用它将创建一个项目,该项目已使用正确的项目设置等正确设置,以创建正确的WinRT二进制文件。