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

Dll 如何在Win32桌面应用程序中使用自定义WinRT库?,dll,windows-8,windows-runtime,c++-cx,Dll,Windows 8,Windows Runtime,C++ Cx,我在基于Win32的桌面应用程序中有一个WinRT类(C++/CX ref类)。它访问WinRT API,工作正常。我过去经常让它工作。现在我正试图将这个类放在桌面应用程序可以使用的库中。我在这方面遇到了不少麻烦。以下是我在Visual Studio 2013中所做的工作: 通过选择安装>模板> VisualC++ >商店应用> Windows应用程序> DLL(Windows)创建了一个新项目。 已将此新DLL项目添加到包含我的桌面应用程序的解决方案中 添加了对DLL项目的引用 在Config

我在基于Win32的桌面应用程序中有一个WinRT类(C++/CX ref类)。它访问WinRT API,工作正常。我过去经常让它工作。现在我正试图将这个类放在桌面应用程序可以使用的库中。我在这方面遇到了不少麻烦。以下是我在Visual Studio 2013中所做的工作:

  • 通过选择安装>模板> VisualC++ >商店应用> Windows应用程序> DLL(Windows)创建了一个新项目。
  • 已将此新DLL项目添加到包含我的桌面应用程序的解决方案中
  • 添加了对DLL项目的引用
  • 在Configuration Properties>C/C++>General>Additional#using directory中,我添加了DLL项目生成.winmd文件的目录
  • 在桌面应用程序的.cpp文件中,我添加了:
  • #使用
    #使用
    #使用
    [MTAThread]//初始化WinRT运行时
    int APIENTRY双主,
    _在当前情况下,
    _在LPTSTR lpCmdLine中,
    _In_uuint(nCmdShow){
    MyWinRTClass ^myObject=ref新建MyWinRTClass();
    }
    
    Intellisense工作正常,我编写代码从库中实例化该类。桌面应用程序会生成,但运行时我会得到:

    MyDesktopApp.exe 0x764 945 98的第一个机会例外:微软C++异常:平台::CaseNoTrgIdGrimeDeXPctuth^在内存位置0x00 A8F99 C .< /P>


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

    自2019年7月26日起更新:请参阅下面帖子中“Adam Braden-MSFT”的评论


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

    这可以通过为其他应用程序写入清单文件来实现吗?我需要同样的“功能”来使用winrt库进行批处理…@yms你成功了吗?@kayleeFrye_onDeck不是真的,我能做的最好的事情就是创建一个应用程序用于测试库的特定目的,然后使用某种IPC与它通信。(1)从秋季创建者更新(1709)版本16299开始,桌面网桥支持调用第三方WinRT组件。使用Windows应用程序打包项目打包应用程序。此处和此处的更多信息(2)自2019年5月更新(1903)版本18362起,如果无法打包应用程序,您可以使用免注册WinRT,请参阅