我相信这可能是某种方式,因为Windows PE加载器已经做到了:
我尝试直接创建一个Windows.UI.Popups.MessageDialog类并实例化“ShowAsync”,但它失败了,找不到Element。 (HRESULT异常:0x80070490)'。我读了this但是我没能像这样创建一个Windows.UI.Core.CoreDispatcher:
#include <Roapi.h>
#include <Winstring.h>
#include <Windows.h>
#include <windows.ui.popups.h>
#include <windows.ui.core.h>
#include <windows.foundation.h>
#include <Unknwn.h>
inline void CheckHresult(HRESULT hr)
{
if (FAILED(hr))
{
DebugBreak();
}
}
struct WinRTString
{
WinRTString() {}
WinRTString(const WinRTString &) = delete;
template<size_t tSizeCharArr>
WinRTString(const wchar_t(&chArr)[tSizeCharArr])
{
*this = chArr;
}
template<size_t tSizeCharArr>
WinRTString & operator= (const wchar_t(&chArr)[tSizeCharArr])
{
this->~WinRTString();
CheckHresult(WindowsCreateString(chArr, sizeof(chArr) / sizeof(chArr[0]) - 1, &hStr));
return *this;
}
operator HSTRING() { return hStr; }
~WinRTString()
{
if (hStr)
WindowsDeleteString(hStr);
hStr = nullptr;
}
HSTRING hStr = nullptr;
};
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow)
{
ABI::Windows::UI::Core::ICoreDispatcher *pUIDispatcher;
CheckHresult(RoActivateInstance(WinRTString(L"Windows.UI.Core.CoreDispatcher"), (IInspectable**) &pUIDispatcher)); //fails
}
'RoActivateInstance'HINSTANCE'0x80040154:Class not registered'。
任何想法如何显示equvilent消息。我知道在msdn文档中它说只有Metro应用程序支持此API,但是当“此应用程序无法在您的PC上运行”时,如何在桌面上显示此消息?
答案 0 :(得分:0)
Desktop apps Windows Runtime classes列出了公开提供的课程。引用的消息框示例必须使用WRL将WinRT API作为传统COM使用,其实现细节仅供内部使用。