두 개의 COM 인터페이스 포인터 (예 : ID3D11Texture2D)가 있고 기본 클래스 인스턴스가 동일한 지 확인하려면 두 포인터를 직접 비교하여 평등하게 비교할 수 있습니까? 나는 비교가 끝나기 전에 뭔가 다른 것에 던져 넣은 코드를 보았습니다. 그래서 확인하고 싶었습니다.COM 포인터가 같은지 확인하십시오.
BOOL IsEqual (ID3D11Texture2D *pTexture1, ID3D11Texture2D *pTexture2)
{
if (pTexture1 == pTexture2)
{
return true;
}
else
{
return false;
}
}
감사합니다.
해당 포인터에서'Release()'를 호출해야한다는 것을 잊지 마십시오. –
포인터 비교가 필요하기 전에 왜 IUKnown에 대한 QI를 볼 수 있습니다. 그러나 나는 실용 주의적 관점에서 이것을 이해하려고 애를 쓰고있다. 인터페이스 포인터는 기본 클래스가 구현하는 인터페이스 메소드에 대한 vtbl 포인터입니다. 사실, 내가 본 QI의 대부분의 구현은 "this"포인터의 단순한 static_cast이며, 단순히 클래스 구현의 메모리 레이아웃을 탐색하여 vtbl 포인터를 얻습니다. 따라서 동일한 포인터를 통해 같은 인터페이스를 사용하는 QI 인 경우 어떤 상황에서 동일한 포인터를 반환하지 않을지 궁금하지 않습니다. – lancery
@lancery - COM ID는 IUnknown에만 있습니다. 일부 구현은 같은 포인터를 배경으로 반환하지만 다른 IID에 대해서는 아무 것도 가정 할 수 없습니다. 또한 다음을 확인하십시오 : http://msdn.microsoft.com/en-us/library/windows/desktop/ms686590(v=vs.85).aspx –