web-dev-qa-db-ja.com

CからWinRTを使用していますか?

// BUILDを見て、WinRT APIがCコードによって消費されることがわかりました。

enter image description here

Win32開発者が利用できる新しいC APIにかなり興奮しています。

C WinRT APIに関する情報はどこにありますか?既存のWin32 C APIよりも優れていますか?

49
Andrew

WinRTは基本的にCOMであるため、CからのWinRTコンポーネントの使用はCからのCOMコンポーネントの使用に似ています。以前と同様に、すべてのWinRTコンポーネントの.idlファイルと、それらの.idlファイルから生成された.hファイルを取得します。 .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」の中を見て、.idlファイルと.hファイルを確認します。

68
Pavel Minaev