2

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

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

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

4

1 回答 1

3

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

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

或者,使用 C++/CX 创建 WinRT 组件的正确方法是使用 Visual C++ -> Windows Store 下名为“Windows 运行时组件”的 VS 项目模板。使用它会创建一个项目,该项目已经使用正确的项目设置等正确设置,以创建正确的 WinRT 二进制文件。

于 2012-12-28T06:51:44.740 回答