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

WinRT DLL created using Visual C++ doesn't load in a Windows Store app

本文关键字:应用 Windows 加载 C++ Visual 创建 DLL WinRT 使用      更新时间:2023-10-16

我正在使用Visual Studio 2012编写Windows 8商店应用程序。主应用程序是XAML/C#应用程序,但它还使用使用C /CX编写的WinRT组件。对于WinRT组件,我正在使用新的Project对话框中使用的VS项目模板,称为" DLL(Windows Store Apps)"。完成此项目后,我将其更改为包含一个带有单个REF类的单个名称空间。我的C#项目包含对此C 项目的引用。

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

我不知道怎么了。如何解决此错误?

Windows运行时组件二进制文件必须具有以下两个导出: dllcanunloadnow dllgetActivationFactory

当您使用VS项目模板" DLL(Windows Store Apps)"时,您的项目不会定义必要的宏,从而导致编译器将上述两个导出放入二进制中。在项目设置下,您会注意到宏集为_windll。您需要将其更改为_WINRT_DLL。

另外,使用C /CX创建WinRT组件的正确方法是在Visual C -> Windows Store 下使用称为" Windows Runtime Component"的VS项目模板。使用此功能将创建一个已经正确设置的项目,并使用正确的项目设置等。