我在基于Win32的桌面应用程序中有一个WinRT类(C ++ / CX ref类)。它访问WinRT API并且工作得很好。我使用this guide来实现它。现在我试图将这个类放在桌面应用程序可以使用的库中。我在这方面遇到了很多麻烦。这是我在Visual Studio 2013中所做的:
#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。
发生了什么?这是正确的做法吗?
答案 0 :(得分:3)
这是不可能的。为了使应用程序使用自定义WinRT组件,该组件需要首先“注册”。对于打包(AppX)应用程序,可以通过在包的AppXManifest.xml中添加一些信息来完成。但是对于常规的Win32桌面应用程序,现在可以进行此类注册。您可以直接调用操作系统提供的WinRT API,但不能写入自己的自定义WinRT API以供其他应用程序使用。