Ответ 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.