На какую библиотеку я должен ссылаться, чтобы получить правильное определение WinRT "EXTERN_C const IID IID ___ x_ABI_ *" - PullRequest
0 голосов
/ 08 апреля 2019

Здесь - это некоторый необработанный код C с использованием windows.gaming.input.h API:

    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?

1 Ответ

1 голос
/ 10 апреля 2019

Похоже, он не включен в SDK.

Как правило, это происходит из библиотеки, такой как uuid.lib. Тем не менее, я не вижу доказательств того, что идентификаторы IID для Windows.Gaming (или других типов winrt, которые я выбрал) поставляются таким образом в любой библиотеке Windows SDK. Использование C поддерживается для типов WinRT, но используется очень легко.

Я открою ошибку, чтобы отследить это, когда завтра вернусь в офис. На данный момент ваш единственный вариант - определить GUID в вашем коде, как вы сделали здесь.

Бен Кун (MSFT)

...