不是很难,可我就是搞不定
typedef struct _Interface
{
virtual long AddRef()=0;
virtual long Release()=0;
virtual BOOL Test( char* mess)=0;
}Interface;
class T : public Interface
{
public:
virtual long AddRef()
{
m_Ref++;
return m_Ref;
}
virtual long Release()
{
m_Ref--;
if(m_Ref==0)
{
delete this;
return 0;
}
return m_Ref;
}
virtual BOOL Test( char* mess)
{
MessageBox( NULL, mess, "", MB_OK );
return TRUE;
}
T():m_Ref(0)
{};
protected:
m_Ref;
};
BOOL Create(PVOID** pVal)
{
T* p1;
p1 = new T;
*pVal = p1;
T** p;
p=(T**)new T*;
p[0] = new T;
p[1] = new T;
p[2] = new T;
p[3] = new T;
p[0]->AddRef();
p[0]->Test("1");
p[0]->Relaese();
p[1]->AddRef();
p[1]->Test("2");
p[1]->Relaese();
p[2]->AddRef();
p[2]->Test("3");
p[2]->Relaese();
p[3]->AddRef();
p[3]->Test("4");
p[3]->Relaese();
return TRUE;
}
void F()
{
Interface* p;
Create(&p);
p->Test("5");
p->Release();
}
其中Create是在DLL中,而F()是在EXE主调程序中,装入DLL等已省略,运行时 F()中的消息框可以出现,但是关闭消息框后出现应用错误,但是如果把Create中的p[2],p[3]的分配与调用去调后一切正常,还有如果Create中去掉输出类的创建出不会出现这种错误