C++作用域解析运算符下IDXGIDevice的GetParent方法不可访问问题
你遇到的是IntelliSense静态代码分析的误报,编译正常通过即可证明代码本身的接口调用逻辑合法。IDXGIDevice继承自IDXGIObject接口,GetParent是IDXGIObject的原生方法,调用本身不存在语法问题。单文件内定义类时IntelliSense不需要跨文件解析头文件上下文,因此不会出现该误报。
以下是几种可消除报错提示的合规写法:
- 显式使用更高版本的DXGI设备接口:IntelliSense对
IDXGIDevice1及更高版本接口的成员解析稳定性更好,只需修改QueryInterface的目标接口即可:
// DDAPI.cpp 修改部分 IDXGIDevice1* pDevice = nullptr; m_Device->QueryInterface(__uuidof(IDXGIDevice1), (void**)&pDevice); pDevice->GetParent(__uuidof(IDXGIAdapter), (void**)&pAdapter);
- 显式转换到IDXGIObject父接口后调用方法:强制让IntelliSense识别到
GetParent方法的所属接口:
// DDAPI.cpp 修改部分 IDXGIDevice* pDevice = nullptr; IDXGIObject* pDxgiObj = nullptr; IDXGIAdapter* pAdapter = nullptr; m_Device->QueryInterface(__uuidof(IDXGIDevice), (void**)&pDevice); pDevice->QueryInterface(__uuidof(IDXGIObject), (void**)&pDxgiObj); pDxgiObj->GetParent(__uuidof(IDXGIAdapter), (void**)&pAdapter); // 接口使用完毕后记得按规则释放COM资源
- 调整头文件包含顺序并重建IntelliSense缓存:将
dxgi1_2.h放到d3d11.h之前包含,随后右键Visual Studio解决方案选择「重新生成IntelliSense数据库」,清除缓存的错误解析结果即可。
内容的提问来源于stack exchange,提问作者dawidchar
相关产品推荐
相关产品推荐

