c - 从 C 使用 WinRT?

标签 c visual-studio winapi windows-runtime

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

enter image description here

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

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

最佳答案

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 文件。

关于c - 从 C 使用 WinRT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7436144/

相关文章:

c - 在c中使用*代替->运算符

C、获取段错误

c - 为什么 C 中的系统调用总是进行错误检查?

.net - 在 .NET 中调试依赖注入(inject)

C++ 如何在 IUIAutomation 级别获取文件的完整路径?

c - 指向一个元素?

vb.net - VB 中的 shell 命令

c# - 选中单选按钮时禁用下拉列表?

c++ - 如何在鼠标点处找到 mfc 控件的句柄但位于其他控件下?

c++ - 获取远程文件的安全细节