如何在Win32桌面应用程序中使用自定义WinRT库?

时间:2015-04-21 02:38:38

标签: dll windows-8 windows-runtime c++-cx

我在基于Win32的桌面应用程序中有一个WinRT类(C ++ / CX ref类)。它访问WinRT API并且工作得很好。我使用this guide来实现它。现在我试图将这个类放在桌面应用程序可以使用的库中。我在这方面遇到了很多麻烦。这是我在Visual Studio 2013中所做的:

  1. 选择 Installed>创建一个新项目模板和GT; Visual C ++>商店应用> Windows Apps> DLL(Windows)
  2. 将此新DLL项目添加到包含我的桌面应用程序的解决方案中。
  3. 添加了对DLL项目的引用
  4. 配置属性> C / C ++>一般>其他#using目录我添加了DLL项目构建.winmd文件的目录。
  5. 在桌面应用程序的.cpp文件中,我添加了:
  6. #using <MyLib.winmd>
    #using <Windows.winmd>
    #using <Platform.winmd>
    
    [MTAThread] // initializes WinRT runtime
    int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
                         _In_opt_ HINSTANCE hPrevInstance,
                         _In_ LPTSTR    lpCmdLine,
                         _In_ int       nCmdShow) {
        MyWinRTClass^ myObject = ref new MyWinRTClass();
    }
    

    Intellisense起作用,我编写了代码来从库中实例化类。桌面应用程序构建,但当它运行时,我得到:

      

    MyDesktopApp.exe中0x76494598的第一次机会异常:Microsoft C ++异常:Platform :: ClassNotRegisteredException ^在内存位置0x00A8F99C。

    发生了什么?这是正确的做法吗?

1 个答案:

答案 0 :(得分:3)

这是不可能的。为了使应用程序使用自定义WinRT组件,该组件需要首先“注册”。对于打包(AppX)应用程序,可以通过在包的AppXManifest.xml中添加一些信息来完成。但是对于常规的Win32桌面应用程序,现在可以进行此类注册。您可以直接调用操作系统提供的WinRT API,但不能写入自己的自定义WinRT API以供其他应用程序使用。