c# - 使用 Visual C++ 创建的 WinRT DLL 无法在 Windows 应用商店应用程序中加载

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

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

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

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

最佳答案

Windows 运行时组件二进制文件需要具有以下两个导出: Dll现在可以卸载 DllGetActivationFactory

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

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

关于c# - 使用 Visual C++ 创建的 WinRT DLL 无法在 Windows 应用商店应用程序中加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14065795/

相关文章:

c# - 自动映射器 : Max graph depth

c++ - 在 C++ 中显示三个数字中的最小数字

asp.net - 使用 GridView.RowDataBound 事件显示特定行

c++ - SFML(32 位 VS12)-SFML.exe : 0xC0000005: Access violation reading location 0x0526. LoadFromFile 中 0x701ADEF8 (msvcr110.dll) 处未处理的异常

c# - 在 c# 中信任存储在 "Trusted Root Certification Authorities"中的 SSL 证书

c# - IDisposable 实现 - 'if (disposing)' 中应该包含什么

c# - 只是对 log4net 日志细节感到好奇

C++ {fmt} 格式动态重复参数

c++ - 成员是私有(private)的,C++ 中的运算符重载

c++ - 在 C++ Visual Studio 2012 中创建类时出错