C Master Volume Windows中的__uuidof

时间:2017-10-30 10:01:28

标签: c windows com uuid

我想用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);

我只发现:Alternative to __uuidof in C

1 个答案:

答案 0 :(得分:1)

CLSID_MMDeviceEnumeratorIID_IMMDeviceEnumerator定义为in your API's header file,即<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
);

(*)请注意,我使用了&(地址),因为在C ++中你有引用,但在C代码中你需要使用指针显式。