wineg++编译时IID_PPV_ARGS未声明,是否有替代方案?
解决wineg++下
IID_PPV_ARGS未定义的问题 IID_PPV_ARGS是MSVC专属的COM辅助宏,wineg++的头文件环境可能没有默认定义它——哪怕你已经引入了<combaseapi.h>。以下是两种直接可行的解决办法:
方案1:直接替换为宏的展开内容
IID_PPV_ARGS(ppType)本质是对__uuidof(**(ppType))和reinterpret_cast<void**>(ppType)的包装。比如你原来的代码:
hr = some_com_object->QueryInterface(IID_PPV_ARGS(&interface_ptr));
可以直接改成:
hr = some_com_object->QueryInterface(__uuidof(YourInterfaceType), reinterpret_cast<void**>(&interface_ptr));
把YourInterfaceType替换成你实际要查询的COM接口类型(比如ID3D11DeviceContext)即可。
方案2:手动定义宏
如果不想修改大量代码,直接在你的源文件开头(或共用头文件)添加宏定义:
#ifndef IID_PPV_ARGS #define IID_PPV_ARGS(ppType) __uuidof(**(ppType)), reinterpret_cast<void**>(ppType) #endif
这样wineg++编译时就能识别这个宏了。
额外补充:编译DX11程序时,wineg++需要链接Windows系统库,建议完善编译命令:
wineg++ -Iimgui/ -Iimgui/backends/ dx11.cpp -o main -ld3d11 -luser32 -lkernel32
避免后续出现链接错误。
内容的提问来源于stack exchange,提问作者BadUsernameIdea
相关产品推荐
相关产品推荐

