Add checks for QueryInterface(IUnknown) to return 'this'. Refs #238

This commit is contained in:
baldurk
2016-04-11 23:14:24 +02:00
parent e24f93970d
commit a0f20713f4
4 changed files with 44 additions and 4 deletions
+7 -1
View File
@@ -1326,7 +1326,13 @@ void WrappedID3D11DeviceContext::ClearMaps()
HRESULT STDMETHODCALLTYPE WrappedID3D11DeviceContext::QueryInterface( REFIID riid, void **ppvObject )
{
if(riid == __uuidof(ID3D11DeviceContext))
if(riid == __uuidof(IUnknown))
{
*ppvObject = (IUnknown *)(ID3D11DeviceContext *)this;
AddRef();
return S_OK;
}
else if(riid == __uuidof(ID3D11DeviceContext))
{
*ppvObject = (ID3D11DeviceContext *)this;
AddRef();
+14 -1
View File
@@ -490,6 +490,13 @@ HRESULT STDMETHODCALLTYPE WrappedID3D11Debug::QueryInterface(REFIID riid, void *
)
return m_pDevice->QueryInterface(riid, ppvObject);
if(riid == __uuidof(IUnknown))
{
*ppvObject = (IUnknown *)(ID3D11Debug *)this;
AddRef();
return S_OK;
}
string guid = ToStr::Get(riid);
RDCWARN("Querying ID3D11Debug for interface: %s", guid.c_str());
@@ -524,7 +531,13 @@ HRESULT WrappedID3D11Device::QueryInterface(REFIID riid, void **ppvObject)
HRESULT hr = S_OK;
if(riid == __uuidof(IDXGIDevice))
if(riid == __uuidof(IUnknown))
{
*ppvObject = (IUnknown *)(ID3D11Device2 *)this;
AddRef();
return S_OK;
}
else if(riid == __uuidof(IDXGIDevice))
{
hr = m_pDevice->QueryInterface(riid, ppvObject);
+13 -1
View File
@@ -148,7 +148,13 @@ public:
{
return hr;
}
if(riid == __uuidof(IUnknown))
{
*ppvObject = (IUnknown *)(IDXGIKeyedMutex *)this;
AddRef();
return S_OK;
}
if(riid == __uuidof(IDXGIObject))
{
*ppvObject = (IDXGIObject *)(IDXGIKeyedMutex *)this;
@@ -515,6 +521,12 @@ public:
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject)
{
if(riid == __uuidof(IUnknown))
{
*ppvObject = (IUnknown *)(NestedType *)this;
AddRef();
return S_OK;
}
if(riid == __uuidof(NestedType))
{
*ppvObject = (NestedType *)this;
+10 -1
View File
@@ -49,7 +49,16 @@ public:
/* [in] */ REFIID riid,
/* [annotation][iid_is][out] */
__RPC__deref_out void **ppvObject)
{ return WrapQueryInterface(m_pReal, riid, ppvObject); }
{
if(riid == __uuidof(IUnknown))
{
AddRef();
*ppvObject = (IUnknown *)(IDXGIObject *)this;
return S_OK;
}
return WrapQueryInterface(m_pReal, riid, ppvObject);
}
ULONG STDMETHODCALLTYPE AddRef() { return ++m_iRefcount; }
ULONG STDMETHODCALLTYPE Release() { ULONG ret = --m_iRefcount; if(m_iRefcount == 0) delete this; return ret; }