Re: compilation error when using CComPtr w/ CUnknown-derived objects
Actually, adding "public IUnknown" to the class declaration only fixed the
compilation issue but I am now having a problem when the object is
instantiated.
When CComPtr is on the same line (see Example 1 below) the object is correct
but when the CComPtr is outside of the function (see Example 2 below) , the
object is corrupted. Any idea what's wrong now? Thank you. No?l
// Sample class
class CTest :
public CUnknown, public IUnknown
{
public:
DECLARE_IUNKNOWN
CTest(void) :
CUnknown(_T("CTest"), NULL)
{
a = 5;
b = 7;
}
CTest(LPUNKNOWN pUnk, HRESULT* phr) :
CUnknown(_T("CTest"), pUnk, phr)
{
a = 3;
b = 6;
}
static CUnknown* WINAPI CreateInstance(LPUNKNOWN punk, HRESULT *phr)
{
ASSERT(phr);
CTest *pNewObject = new CTest(punk, phr);
if (pNewObject == NULL) {
if (phr)
*phr = E_OUTOFMEMORY;
}
return pNewObject;
}
BOOL Hello()
{
return TRUE;
}
protected:
int a, b;
};
// Example 1: created object is OK
void Instantiate(void)
{
HRESULT hr = S_OK;
CComPtr<CTest> pTest = reinterpret_cast<CTest*>(CTest::CreateInstance(NULL,
&hr));
}
Debugger output:
- pTest {0x003e5e50} ATL::CComPtr<CTest>
- ATL::CComPtrBase<CTest> {p=0x003e5e50 } ATL::CComPtrBase<CTest>
- p 0x003e5e50 {a=0x00000003 b=0x00000006 } CTest *
+ CUnknown {m_pUnknown=0x003e5e50 m_cRef=0x00000001 } CUnknown
+ IUnknown {...} IUnknown
a 0x00000003 int
b 0x00000006 int
// Example 2: created object is corrupted
CComPtr<CTest> pTest;
void Instantiate(void)
{
HRESULT hr = S_OK;
pTest = reinterpret_cast<CTest*>(CTest::CreateInstance(NULL, &hr));
}
Debugger output:
- pTest {0x003e5f08} ATL::CComPtr<CTest>
- ATL::CComPtrBase<CTest> {p=0x003e5f08 } ATL::CComPtrBase<CTest>
- p 0x003e5f08 {a=0xabababab b=0x00000000 } CTest *
+ CUnknown {m_pUnknown=0x00000006 m_cRef=0xfdfdfdfd } CUnknown
+ IUnknown {...} IUnknown
a 0xabababab int
b 0x00000000 int
--
No?l
http://noeld.com/