Использование WinRT с C? - программирование
Подтвердить что ты не робот

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

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

enter image description here

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

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

4b9b3361

Ответ 1

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

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

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

что эквивалентно этой ванильке С++:

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 Preview для просмотра файлов .idl и .h.