Есть хост приложение для Win с поддержкой модулей.
Набросал простой модуль (msvc 2008), использующий wxWidgets.
и простой wxApp:
Code: Select all
....
IMPLEMENT_APP_NO_MAIN(Application)
bool Application::OnInit()
{
if( !wxApp::OnInit() )
return false;
MainWindow *win = new MainWindow;
win->Show(true);
SetTopWindow(win);
return true;
}
вылазит memory dump по случаю утечек в памяти.
Но. Application нигде не создается и не используется. Точнее
wxWidgets вообще не используется. Реализована только пара классов: wxApp и wxFrame, а их инстанцирование нигде не производится равно как и инициализация wxWidgets.
Пробвал компилировать с монилитной 2.8.9, монолитной 3.0, и "обычной" 3.0. Все версии debug.
Никто не сталкивался с таким?
Memory leaks происходят и вслучае инициализации wxWidgets:
Code: Select all
...
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
wxApp::SetInstance(new Application);
wxEntry(module_instance, NULL, 0, 0);
DebugMessage("End work", 0);
wxEntryCleanup();
return true;
}
...
// инициализация
m_guiThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);
...
// вызывается при выгрузке модуля
wxCloseEvent ev(wxEVT_CLOSE_WINDOW);
ev.SetEventObject(wxTheApp);
ev.SetCanVeto(false);
wxWindow *w = wxTheApp->GetTopWindow();
wxPostEvent(w, ev);
WaitForSingleObject(m_guiThread, INFINITE);
CloseHandle(m_guiThread);
Здесь Anvil - это хост программа, ATrader - модуль."Anvil.exe": Загружено: "D:\Work\lua_work\ATrader-0.3\build\win32\Debug\ATrader.dll", Символы загружены.
"Anvil.exe": Загружено: "D:\Work\ATrader\AnvilDebug\wxbase290ud_vc_custom.dll", Символы загружены.
"Anvil.exe": Загружено: "C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_f863c71f\msvcp90d.dll", Символы загружены.
"Anvil.exe": Загружено: "C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_f863c71f\msvcr90d.dll", Символы загружены.
"Anvil.exe": Загружено: "D:\Work\ATrader\AnvilDebug\wxmsw290ud_core_vc_custom.dll", Символы загружены.
"Anvil.exe": Загружено: "C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugMFC_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_c94a3a24\mfc90ud.dll", Символы загружены.
"Anvil.exe": Загружено "C:\WINDOWS\system32\msimg32.dll"
"Anvil.exe": Загружено "D:\Work\ATrader\AnvilDebug\boost_thread-vc90-mt-gd-1_38.dll"
"Anvil.exe": Загружено: "C:\WINDOWS\WinSxS\x86_Microsoft.VC90.MFCLOC_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_b0db7d03\mfc90rus.dll", Двоичный код не был построен с отладочной информацией.
Thread id=2852: ATrader DLL Initialization ...
Thread id=2852 class gui::Gui *@04C13C20: initialization()
Thread id=2852 class gui::Gui *@04C13C20: uninitialization()
Detected memory leaks!
Dumping objects ->
{2405} normal block at 0x04C0CE10, 48 bytes long.
Data: <w x H V S c r o > 77 00 78 00 48 00 56 00 53 00 63 00 72 00 6F 00
{2404} normal block at 0x04C0CDA8, 40 bytes long.
Data: < > 00 00 00 00 CD CD CD CD 10 CE C0 04 CD CD CD CD
{2403} normal block at 0x04C0CD58, 16 bytes long.
Data: <( ! hb > 28 90 B9 03 A8 CD C0 04 E4 21 B7 04 68 62 B9 03
{2400} normal block at 0x04C0CCE8, 48 bytes long.
Data: <w x H S c r o l > 77 00 78 00 48 00 53 00 63 00 72 00 6F 00 6C 00
{2399} normal block at 0x04C0CC80, 40 bytes long.
Data: < > 00 00 00 00 CD CD CD CD E8 CC C0 04 CD CD CD CD
{2398} normal block at 0x04C0CC30, 16 bytes long.
Data: <0 ! hb > 30 CC C0 04 80 CC C0 04 CC 21 B7 04 68 62 B9 03
{2395} normal block at 0x04C0CBC0, 48 bytes long.
Data: <w x V S c r o l > 77 00 78 00 56 00 53 00 63 00 72 00 6F 00 6C 00
// дальше туева хуча
...
"Anvil.exe": Выгружено: "D:\Work\lua_work\ATrader-0.3\build\win32\Debug\ATrader.dll"
"Anvil.exe": Выгружено: "D:\Work\ATrader\AnvilDebug\boost_thread-vc90-mt-gd-1_38.dll"
"Anvil.exe": Выгружено: "C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugMFC_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_c94a3a24\mfc90ud.dll"
"Anvil.exe": Выгружено: "C:\WINDOWS\system32\msimg32.dll"
"Anvil.exe": Выгружено: "D:\Work\ATrader\AnvilDebug\wxmsw290ud_core_vc_custom.dll"
"Anvil.exe": Выгружено: "D:\Work\ATrader\AnvilDebug\wxbase290ud_vc_custom.dll"
...