首页 > 解决方案 > 我应该链接哪个库来正确定义 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

标签: cwindows-runtime

解决方案


这似乎不包含在 SDK 中。

通常,这将来自像 uuid.lib 这样的库。但是,我没有看到任何证据表明在 Windows SDK 的任何库中都以这种方式提供了用于 Windows.Gaming(或我抽查过的其他 winrt 类型)的 IID。winrt 类型支持 C 使用,但使用非常少。

当我明天回到办公室时,我会打开一个错误来跟踪这个。目前,您唯一的选择是在您的代码中定义 GUID,就像您在此处所做的那样。

本·库恩 (MSFT)


推荐阅读