thi*_*his 3 c com winapi windows-7 mingw-w64
尝试使用COM和CoCreateInstance()在C中使用MinGW-w64编译示例代码失败.
#include <windows.h>
#include <mmdeviceapi.h>
#include <endpointvolume.h>
#include <stdlib.h>
#include <stdio.h>
extern const CLSID CLSID_MMDeviceEnumerator;
extern const IID IID_IMMDeviceEnumerator;
int main( void )
{
CoInitialize( NULL );
LPVOID device = NULL;
const HRESULT ok = CoCreateInstance( &CLSID_MMDeviceEnumerator, NULL,
CLSCTX_INPROC_SERVER, &IID_IMMDeviceEnumerator,
&device );
CoUninitialize();
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
编译:gcc main.c libole32.a -Wall -Wextra -oa
即使在mmdeviceapi.h中定义了CLSID_MMDeviceEnumerator,也找不到它.实际上从示例代码中删除我的extern定义给出了相同的结果,因为两个externs似乎都在mmdeviceapi.h中定义
当我使用__uuidof并使用g ++进行编译时,代码工作正常,但__uuidof的这个C"替换"却没有.
为什么没有找到COM标识符?
使用MinGW-w64时,解决方案是在包含#include <initguid.h>
包含COM标识符(例如mmdeviceapi.h
,)的标头之前包含标头endpointvolue.h
.
然后不需要额外的声明,并且可以直接使用标识符.
解:
#include <windows.h>
#include <initguid.h>
#include <mmdeviceapi.h>
#include <endpointvolume.h>
#include <stdlib.h>
#include <stdio.h>
int main( void )
{
CoInitialize( NULL );
LPVOID device = NULL;
const HRESULT ok = CoCreateInstance( &CLSID_MMDeviceEnumerator, NULL,
CLSCTX_INPROC_SERVER, &IID_IMMDeviceEnumerator,
&device );
CoUninitialize();
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1300 次 |
最近记录: |