我的基于 Win32 的桌面应用程序中有一个 WinRT 类(C++/CX 引用类)。它访问 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 工作,我编写了代码来实例化库中的类。桌面应用程序构建,但是当它运行时我得到:
First-chance exception at 0x76494598 in MyDesktopApp.exe: Microsoft C++ exception: Platform::ClassNotRegisteredException ^ at memory location 0x00A8F99C.
这是怎么回事?这是正确的方法吗?
最佳答案
截至 2019 年 7 月 26 日的更新:请参阅以下线程中“Adam Braden - MSFT”的评论。
这是不可能的。为了让应用程序使用自定义 WinRT 组件,需要先“注册”该组件。对于打包 (AppX) 应用程序,这是通过将一些信息添加到包的 AppXManifest.xml 中来完成的。但是,对于常规 Win32 桌面应用程序,现在可以进行此类注册。您可以直接调用操作系统提供的 WinRT API,但不能写入自己的自定义 WinRT API 以供其他应用程序使用。
关于dll - 如何在 Win32 桌面应用程序中使用自定义 WinRT 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29761911/