Использование WinRT из C? - PullRequest
       2

Использование WinRT из C?

47 голосов
/ 15 сентября 2011

Просматривая материал // BUILD, я увидел, что WinRT API можно использовать кодом C:

enter image description here

Я довольно взволнован свежим C API, доступным для разработчиков Win32.

Где я могу найти информацию о C WinRT API? Чем он лучше существующего Win32 C API?

1 Ответ

68 голосов
/ 16 сентября 2011

WinRT по своей сути является COM, поэтому использование компонентов WinRT из C похоже на использование компонентов COM из C. Как и раньше, вы получаете файлы .idl для всех компонентов WinRT, а также файлы .h, созданные из этих файлов .idl.Файлы .h включают в себя как декларации C ++, так и C (при необходимости обернутые в #ifdef __cplusplus).Вы можете просто #include их и начать взламывать.

Это не совсем аккуратно, например, что-то вроде этого C ++ / CX:

Windows::UI::Xaml::Controls::TextBlock^ tb = ...;
tb->Text = "Foo";

, что эквивалентно этому ванильному C ++:

Windows::UI::Xaml::Controls::ITextBlock* tb = ...;
HSTRING hs;
HRESULT hr = WindowsStringCreate(L"Foo", 3, &hs);
// check hr for errors
hr = tb->set_Text(hs);
// check hr for errors
tb->Release();

будет записано в C как:

__x_Windows_CUI_CXaml_CControls_CITextBlock* tb = ...;
HRESULT hr;
HSTRING hs;
hr = WindowsCreateString(L"Foo", 3, &hs);
// check hr for errors
hr = __x_Windows_CUI_CXaml_CControls_CITextBlock_put_Text(tb, hs);
// check hr for errors
IUnknown_Release(tb);

Загляните в "C: \ Program Files (x86) \ Windows Kits \ 8.0 \ Include \ winrt" в Preview для разработчиков, чтобы увидетьфайлы .idl и .h.

...