__uuidof в C Мастер громкости Windows

Я хочу изменить основной объем с помощью C, но __uuidof только для C++; что я могу использовать вместо этого?

const CLSID CLSID_MMDeviceEnumerator = __uuidof(MMDeviceEnumerator);
const IID IID_IMMDeviceEnumerator = __uuidof(IMMDeviceEnumerator);
hr = CoCreateInstance(
     CLSID_MMDeviceEnumerator, NULL,
     CLSCTX_ALL, IID_IMMDeviceEnumerator,
     (void**)&deviceEnumerator);

Я только нашел, что: Альтернатива __uuidof в C

1 ответ

Решение

CLSID_MMDeviceEnumerator а также IID_IMMDeviceEnumerator определены в заголовочном файле вашего API, т.е. <mmdeviceapi.h>,

Вы должны использовать эти определения в вашем коде C, а не __uuidof, так как это доступно только для кода C++.

Обратите внимание, что вам нужно включить <initguid.h> до <mmdeviceapi.h>:

#include <initguid.h>
#include <mmdeviceapi.h>

Тогда этот код должен работать:

hr = CoCreateInstance(
    &CLSID_MMDeviceEnumerator, (*)
    NULL,
    CLSCTX_ALL, 
    &IID_IMMDeviceEnumerator,  (*)
    (void**)&deviceEnumerator
);

(*) Обратите внимание, что я использовал & (address-of), так как в C++ у вас есть ссылки, но в коде C вам нужно явно указывать с помощью указателей.

Другие вопросы по тегам