Любые идеи, почему приведенный выше код не создает экземпляр класса. Я пытаюсь использовать WinRT в приложении Windows, и вот фрагмент кода, он не где комментируется с «!»:WinRT создает «Windows.UI.Popups.MessageDialog» в приложении для рабочего стола.
#include <Roapi.h>
#include <Winstring.h>
#include <Windows.h>
#include <windows.ui.popups.h>
#include <windows.foundation.h>
inline void CheckHresult(HRESULT hr)
{
if (FAILED(hr))
{
DebugBreak();
}
}
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow)
{
CheckHresult(RoInitialize(RO_INIT_MULTITHREADED));
static const wchar_t ClassName[] = L"Windows.UI.Popups.MessageDialog";
HSTRING hClassStr, hStr;
CheckHresult(WindowsCreateString(ClassName, sizeof(ClassName)/sizeof(ClassName[0]) - 1, &hClassStr));
ABI::Windows::UI::Popups::IMessageDialog* pClass;
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
CheckHresult(RoActivateInstance(hClassStr, (IInspectable**)&pClass)); //here it fails with E_NOTIMPL !!!!!!!!!!
WindowsDeleteString(hClassStr);
static const wchar_t msgTitleName [] = L"Metro Message Box!";
CheckHresult(WindowsCreateString(msgTitleName, sizeof(msgTitleName)/sizeof(msgTitleName[0]) - 1, &hStr));
CheckHresult(pClass->put_Title(hStr));
WindowsDeleteString(hStr);
static const wchar_t msgContent [] = L"Hello Metro.";
CheckHresult(WindowsCreateString(msgContent, sizeof(msgContent)/sizeof(msgContent[0]) - 1, &hStr));
CheckHresult(pClass->put_Content(hStr));
WindowsDeleteString(hStr);
CheckHresult(pClass->ShowAsync(nullptr));
}
Я понятия не имею, почему это происходит.
EDIT:
Функция 'RoActivateInstance' терпит неудачу, пытаясь активировать экземпляр класса с именем 'Windows.UI.Popups.MessageDialog' с HRESULT из 'E_NOTIMPL'.