2010-12-14 86 views
1

我正在調查我正在處理的應用程序的崩潰。 visual basic部分是一個簡單的表單,它可以創建PictureBox和按鈕。在點擊按鈕時,調用C + dll。 PictureBoxes爲使用WINAPI創建窗口並在OpenGL中顯示的DLL提供句柄。MSVBVM60.dll與VB6和C++ DLL訪問衝突

最初在PictureBox中創建視圖沒有問題,並且顯示正確,但在重置事件時,視圖被銷燬並重新創建。這是發生崩潰的時候。

我已經嘗試過許多工具,應用程序驗證程序,Windbg和調試診斷工具。 Windbg和調試診斷工具指向的地方,但我不知道如何解決它。

不幸的是,從VB6切換不適合我,因爲它不在我的控制範圍之內。

請按照指向崩潰日誌的鏈接。

link text(olny允許張貼1個鏈接,但兩者日誌可見)

任何幫助非常感謝,

萊昂

+0

可能是C++ API中的某些東西調用而不是VB6中的任何東西。也許它正在銷燬不屬於它的Windows句柄? – MarkJ 2010-12-14 14:32:02

+0

這也是我的猜測,你可能會緩存一個窗口句柄或C++代碼中的某個其他句柄,這些句柄在重置後不再有效,但代碼仍在嘗試使用它。 – DarinH 2010-12-14 15:42:43

+0

你有沒有嘗試只加載C + +代碼登錄到ID失敗的地方? – DarinH 2010-12-14 15:43:07

回答

2

從你的文本文件:

(134c.1344): Access violation - code c0000005 (first chance) 
First chance exceptions are reported before any exception handling. 
This exception may be expected and handled. 
eax=034b0ebc ebx=00000000 ecx=7352e100 edx=00000000 esi=02e6813c edi=02e6813c 
eip=7349fdd2 esp=0012fc20 ebp=0012fc44 iopl=0   nv up ei pl nz na po nc 
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000    efl=00010202 
MSVBVM60!HrMenuHandleMenuCommand+0x3f: 
7349fdd2 ffb048010000 push dword ptr <Unloaded_Ed20.dll>+0x147 (00000148)[eax] ds:0023:034b1004=???????? 
0:000> kb 
ChildEBP RetAddr Args to Child    
0012fc28 7347e1b9 034b0ebc 00000000 02e92ee8 MSVBVM60!HrMenuHandleMenuCommand+0x3f 
0012fc44 7347dc27 034b0ebc 000f144a 00000111 MSVBVM60!_DefWmCommand+0xc7 
0012fcb0 734d378a 02e92ee8 000f144a 00000111 MSVBVM60!VBDefControlProc+0xb47 
0012fcf0 7347ce03 034b0ebc 000f144a 00000111 MSVBVM60!PixCtlProc+0x57c 
0012fd18 7347f800 034b0ebc 000f144a 00000111 MSVBVM60!CommonGizWndProc+0xae 
0012fd74 7e418734 000f144a 00000111 00000000 MSVBVM60!StdCtlWndProc+0x232 
0012fda0 7e418816 7347f5d1 000f144a 00000111 USER32!InternalCallWinProc+0x28 
0012fe08 7e4189cd 00000000 7347f5d1 000f144a USER32!UserCallWinProcCheckWow+0x150 
0012fe68 7e4196c7 0012fe90 00000001 0012feb8 USER32!DispatchMessageWorker+0x306 
0012fe78 7342a6b0 0012fe90 ffffffff 02e76fec USER32!DispatchMessageA+0xf 
0012feb8 7342a627 ffffffff 02e78f8c 02e60000 MSVBVM60!ThunderMsgLoop+0xfd 
0012fecc 7342a5c9 02e76fec ffffffff 02e7efcc MSVBVM60!CMsoCMHandler::FPushMessageLoop+0x19 
0012fefc 7342a505 02e7efcc ffffffff 0000134c MSVBVM60!SCM::FPushMessageLoop+0xb9 
0012ff18 7342a4d0 02e78f88 02e7efcc ffffffff MSVBVM60!SCM_MsoCompMgr::FPushMessageLoop+0x2b 
0012ff3c 73423644 ffffffff 0183f558 0078c2bc MSVBVM60!CMsoComponent::PushMsgLoop+0x26 
0012ffb8 004013aa 00401ac4 7c817077 0183f558 MSVBVM60!ThunRTMain+0x9b 
0012fff0 00000000 004013a0 00000000 78746341 with_debug_info!__vbaS+0xa 

你在:MSVBVM60!HrMenuHandleMenuCommand + 0x3f

fialed指令:push dword ptr + 0x147(00000148)[eax] ds:0023:034b1004 = ????????

eax無效,因此derefernce失敗。

我的猜測是你在Ed20.dll中有一個菜單處理程序,你試圖運行,但是這個DLL已經被卸載(如<Unloaded_Ed20.dll>所示)。你應該知道爲什麼1.該DLL被卸載或2.爲什麼處理程序在卸載後仍然被註冊。

+0

是的。聞起來像一個經典的引用計數錯誤。 – 2011-12-13 12:54:26