高手请进,关于释放OleObject后然仍出现内存泄漏的问题。

fsdffggjnd 2015-03-31 10:17:23
下面的类,我用这个代码进行测试,(通过任务管理器)发现存在内存泄漏。怎么修改??


for (size_t i = 0; i < 10000; i++)
{

OleTest * ot = new OleTest();
delete ot;
}


下面的类,简单的继承了IOleClientSite,接口都没有实现,很简单的一个类,但不知道为何内存泄漏了。



#include <EXDISP.H>


class OleTest : public IOleClientSite
{
private:
int refNum;

IStorage *storage;
IOleObject *oleObject;
public:
OleTest() :refNum(NULL), storage(NULL), oleObject(NULL)
{
::OleInitialize(NULL);

::StgCreateDocfile(NULL, STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_DIRECT | STGM_CREATE, 0, &(this->storage));
::OleCreate(CLSID_WebBrowser, IID_IOleObject, OLERENDER_DRAW, NULL, this, this->storage, (void**)(&this->oleObject));

if (this->oleObject)
{
this->oleObject->Release();
this->oleObject = NULL;
}
if (this->storage)
{
this->storage->Release();
this->storage = NULL;
}


::OleUninitialize();
}

~OleTest()
{
}

virtual HRESULT STDMETHODCALLTYPE QueryInterface(
/* [in] */ REFIID riid,
/* [iid_is][out] */ __RPC__deref_out void __RPC_FAR *__RPC_FAR *ppvObject)
{
*ppvObject = NULL;

if (riid == IID_IUnknown)
{
*ppvObject = this;
}
else if (riid == IID_IOleClientSite)
{
*ppvObject = (IOleClientSite *)this;
}

if (*ppvObject)
{
this->AddRef();
return S_OK;
}

return E_NOINTERFACE;
}

virtual ULONG STDMETHODCALLTYPE AddRef(void)
{
this->refNum++;
return this->refNum;
}

virtual ULONG STDMETHODCALLTYPE Release(void)
{
this->refNum--;
return this->refNum;
}


//***********************IOleClientSite接口*******************

virtual HRESULT STDMETHODCALLTYPE SaveObject(void)
{
return S_OK;
}

virtual HRESULT STDMETHODCALLTYPE GetMoniker(
/* [in] */ DWORD dwAssign,
/* [in] */ DWORD dwWhichMoniker,
/* [out] */ __RPC__deref_out_opt IMoniker **ppmk)
{
*ppmk = NULL;
return E_NOTIMPL;
}

virtual HRESULT STDMETHODCALLTYPE GetContainer(
/* [out] */ __RPC__deref_out_opt IOleContainer **ppContainer)
{
*ppContainer = NULL;
return E_FAIL;
}

virtual HRESULT STDMETHODCALLTYPE ShowObject(void)
{
return S_OK;
}

virtual HRESULT STDMETHODCALLTYPE OnShowWindow(
/* [in] */ BOOL fShow)
{
return S_OK;
}

virtual HRESULT STDMETHODCALLTYPE RequestNewObjectLayout(void)
{
return S_OK;
}



};









...全文
81 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧