2010-12-14 2 views
1

Я изучаю сбой приложения, над которым я работаю. Визуальная основная часть - простая форма, которая создает PictureBoxes и кнопки. Вызовы выполняются на C + dll при нажатии кнопки. PictureBoxes предоставляют дескрипторы DLL, которые используют их для создания окон с помощью WINAPI и отображаются в OpenGL.Нарушение прав доступа в MSVBVM60.dll с dll VB6 и C++

Первоначально представления создаются в PictureBoxes без проблем и отображаются корректно, но при событии сброса виды уничтожаются и воссоздаются. Это происходит, когда происходит авария.

Я пробовал множество инструментов, Application verifier, Windbg и Debug Diagnostic Tool. Оба инструмента Windbg и Debug Diagnostic Tool указывают на место, однако я не знаю, как его исправить.

К сожалению, переход от VB6 для меня не является возможным, так как он находится вне моего контроля.

Пожалуйста, перейдите по ссылкам для аварийных логов.

link text (Olny разрешается размещать 1 ссылку, но оба бревна видны)

Любая помощь очень ценится,

Leon

+0

Возможно, что-то в C++ API вызывает, а не что-то подобное с VB6 как таковым. Возможно, это разрушает дескрипторы Windows, которые не принадлежат ему? – MarkJ

+0

Это было бы моим предположением, скорее всего, вы будете кэшировать дескриптор окна или какой-либо другой дескриптор кода C++, который больше не действует после сброса, но код все еще пытается его использовать. – DarinH

+0

Вы пытались просто загрузить код C++ с записью на id, где его ошибка? – DarinH

ответ

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

Инструкция, которая завербовалась: нажмите dword ptr + 0x147 (00000148) [eax] ds: 0023: 034b1004 = ????????

eax недействителен, поэтому неисправность не удалась.

Я предполагаю, что у вас есть обработчик меню в Ed20.dll, который вы пытаетесь запустить, но эта DLL была выгружена (как указано <Unloaded_Ed20.dll>). Вы должны выяснить, почему 1. dll была выгружена или 2. Почему обработчик все еще зарегистрирован после разгрузки.

+0

Yup. Пахнет классической ошибкой подсчета ссылок. –