51

观看 //BUILD 的东西,我看到 WinRT API 可以被 C 代码使用:

在此处输入图像描述

我对 Win32 开发人员可用的全新 C API 感到非常兴奋。

在哪里可以找到有关 C WinRT API 的信息?它比现有的 Win32 C API 有什么优势?

4

1 回答 1

73

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);

在 Developer Preview 中查看“C:\Program Files (x86)\Windows Kits\8.0\Include\winrt”以查看 .idl 和 .h 文件。

于 2011-09-15T20:22:13.253 回答