尝试使用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;
}
编译:gcc main.c libole32.a -Wall -Wextra -o a
即使在mmdeviceapi.h中定义了CLSID_MMDeviceEnumerator,也找不到它。实际上从示例代码中删除我的extern定义会得到相同的结果,因为两个externs似乎都是在mmdeviceapi.h中定义的。
当我使用__uuidof并使用g ++进行编译时,代码有效,但__uuidof的这个C“替换”却没有。
为什么没有找到COM标识符?
答案 0 :(得分:5)
使用MinGW-w64时,解决方案是在包含包含COM标识符(例如player.getY()=100
platform.getFirst().getY()=200
player.getHeight=50
@Override
protected void onManagedUpdate(float pSecondsElapsed) {
// in this position player.getY always 100 evertime onManagedUpdate is called even I already set up player.setPosition like below
if (player.getY() < platforms.getFirst().getY()) {
float x = platforms.getFirst().getX();
float y= platforms.getFirst().getY() + player.getHeight() / 2;
player.setPosition(x, y);
}
}
,#include <initguid.h>
的标头)之前包含标头mmdeviceapi.h
。
然后不需要额外的声明,并且可以直接使用标识符。
解决方案:
endpointvolue.h