2015-01-30 6 views
0

Любые идеи, почему приведенный выше код не создает экземпляр класса. Я пытаюсь использовать 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'.

ответ

0

Если вы посмотрите на нижнюю часть страницы MSDN, на которую вы ссылаетесь, это означает, что минимальный поддерживаемый клиент - это Windows 8 Только приложения для магазина.

API не поддерживается в обычной настольной программе.