c - 我应该链接哪个库来正确定义 WinRT 的“EXTERN_C const IID IID___x_ABI_*”
问题描述
这是一些使用API的原始 C代码:windows.gaming.input.h
HSTRING gamepadClassName;
if (FAILED(WindowsCreateString(RuntimeClass_Windows_Gaming_Input_Gamepad,
HbArrayLength(RuntimeClass_Windows_Gaming_Input_Gamepad) - 1, &gamepadClassName))) {
Error("Failed to create a WinRT string reference for Windows.Gaming.Input.Gamepad class name.");
}
static IID const gamepadStaticsInterfaceID = { 0x8BBCE529, 0xD49C, 0x39E9, { 0x95, 0x60, 0xE4, 0x7D, 0xDE, 0x96, 0xB7, 0xC8 } };
if (FAILED(RoGetActivationFactory(gamepadClassName, &gamepadStaticsInterfaceID, &HbInputi_Windows_Gamepad_Statics))) {
Error("Failed to get the IGamepadStatics activation factory for Windows.Gaming.Input.Gamepad.");
}
WindowsDeleteString(gamepadClassName);
有没有办法摆脱gamepadStaticsInterfaceID
代码中的这个 GUID 定义?我尝试IID___x_ABI_CWindows_CGaming_CInput_CIGamepadStatics
在标头中使用声明, windows.gaming.input.h
但后来我有了error LNK2001: unresolved external symbol IID___x_ABI_CWindows_CGaming_CInput_CIGamepadStatics
. 我应该链接什么库来正确定义IID___x_ABI_CWindows_CGaming_CInput_CIGamepadStatics
?
解决方案
这似乎不包含在 SDK 中。
通常,这将来自像 uuid.lib 这样的库。但是,我没有看到任何证据表明在 Windows SDK 的任何库中都以这种方式提供了用于 Windows.Gaming(或我抽查过的其他 winrt 类型)的 IID。winrt 类型支持 C 使用,但使用非常少。
当我明天回到办公室时,我会打开一个错误来跟踪这个。目前,您唯一的选择是在您的代码中定义 GUID,就像您在此处所做的那样。
本·库恩 (MSFT)
推荐阅读
- html - 从两侧调整全屏 html 视频的大小
- swift - 导航控制器中的 UISearchController/SearchBar
- oracle - oracle web logic server is not installed 提取文件时出现错误
- r - 用R中相邻列中的字符替换列中的字符?
- git - Git 推送不起作用错误“您必须使用个人访问令牌或 SSH 密钥”
- spring-cloud - Spring Cloud Bus 和 Spring for Apache Kafka 有什么区别?
- ios - 删除用户通知后 Swift,我需要一个熟食店来更新待处理的通知
- http - 如何在请求中转义正斜杠以使 url-router 将其视为 uri 参数的一部分?
- css - CSS将渐变作为蒙版应用于DIV
- java - 支持按查询分区的 HSQL 的内存数据库替代方案