我使用了一个QueryInterface
函数,它将基于 IID 返回给定接口上的指针。
DecodingFramework::IVariableFramerate* pInt = NULL;
DecodingFramework::DecodeResult iVFR = pVideoDescription->QueryInterface(IID_IVariableFramerate, (void**)(&pInt));
if(pInt != NULL && iVFR == DF_SUCCESS)
{
//use the IVariableFramerate interface using pInt
}
但是在该代码中(void**)(&pInt)
会产生带有消息的错误dereferencing type-punned pointer will break strict-aliasing rules
我将代码更新为以下内容:
void* pInt = NULL;
DecodingFramework::DecodeResult iVFR = pVideoDescription->QueryInterface(IID_IVariableFramerate, &pInt);
if(pInt != NULL && iVFR == DF_SUCCESS)
{
DecodingFramework::IVariableFramerate* pVideoVFR = reinterpret_cast<DecodingFramework::IVariableFramerate*>(pInt);
//use the IVariableFramerate interface using pVideoVFR
}
我发现了很多与该警告消息相关的问题,但主要是在将更复杂的数据转换为void**
? 真的有问题吗?我不明白该警告背后的理性。