我有一个 Win32 C++ 应用程序。最后的 while 循环中有 _tWinMain(...) 方法和 GetMessage(...) 。在 GetMessage(...) 之前我创建了主窗口
HWND m_MainHwnd = CreateWindowExW(WS_EX_TOOLWINDOW | WS_EX_LAYERED, CAxWindow::GetWndClassName(), _TEXT("http://www.-website-.com"), WS_POPUP, 0, 0, 1024, 768, NULL, NULL, m_Instance, NULL);
ShowWindow(m_MainHwnd)
如果我不创建主窗口,我的应用程序需要大约 150K 的内存。
但是随着在内部创建带有 WebBrowser 控件的主窗口,内存使用量增加到 8500K。
但是,我想动态卸载主窗口。我的 _tWinMain(...) 一直在运行!我正在卸载
DestroyWindow(m_MainHwnd)
但是 WebBrowser 控件不会卸载并释放它使用的内存!
应用内存占用还是8500K!
我还可以获得 WebBrowser 实例或一些额外的代码 WebBrowser HWND
IWebBrowser2* m_pWebBrowser2;
CAxWindow wnd = (CAxWindow)m_MainHwnd;
HRESULT hRet = wnd.QueryControl(IID_IWebBrowser2, (void**)&m_pWebBrowser2);
所以我尝试释放主窗口和 WebBrowser 控件使用的内存(假设它是实验性的):
if(m_pWebBrowser2)
m_pWebBrowser2->Release();
DestroyWindow(m_hwndWebBrowser); //<-- just analogous
OleUninitialize();
完全没有成功。
我还创建了一个用于创建主窗口的包装器类。我创建了一个指针并通过删除将其释放:
Wrapper* wrapper = new Wrapper();
//wrapper creates main window inside and shows it
//...do some stuff
delete(wrapper);
没有成功。还是8500K。 所以请问,我怎样才能摆脱主窗口和它的 WebBrowser 控件并释放内存,返回到大约 150K。 稍后我将重新创建窗口。它是主窗口的动态加载和卸载,具体取决于其他命令。
谢谢!
问候
马丁
最佳答案
您有所谓的引用泄漏。在您对 IWebBrowser2* 调用::Release() 之前,查看打开了多少引用。如果它不是 1,那么某处的其他东西引用了您的对象。
另外,不要忘记 IWebBrowser2::Quit() 你的控件...
关于c++ - ATL 窗口中的 WebBrowser 控件。如何在窗口卸载时释放内存?我卡住了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2640698/