2010-12-14 35 views
1

私が取り組んでいるアプリケーションのクラッシュを調べています。ビジュアル基本部分は、ピクチャボックスとボタンを作成するシンプルなフォームです。ボタンをクリックするとC + dllが呼び出されます。 PictureBoxesは、WINAPIを使用してウィンドウを作成し、OpenGLで表示するためにDLLを使用するDLLへのハンドルを提供します。VB6とC++のDLLでMSVBVM60.dllのアクセス違反

最初にピクチャボックスにビューを作成しても問題はなく、正しく表示されますが、リセットイベントではビューは破棄されて再作成されます。これは、クラッシュが発生したときです。

私は多くのツール、アプリケーション検証ツール、Windbgツール、およびデバッグ診断ツールを試しました。 WindbgとDebug Diagnostic Toolの両方が場所を指していますが、修正方法はわかりません。

残念ながら、VB6からの切り替えは、私のコントロール外のため、私にとってはオプションではありません。

クラッシュログへのリンクをたどってください。

link text(olnyは1つのリンクを投稿することができますが、両方のログが表示されている)

大歓迎任意のヘルプ、

レオン

+0

おそらくC++ APIの何かが、VB6と何か関係があるというよりもむしろ何かを呼び出すでしょう。おそらくそれはそれに属していないWindowsのハンドルを破壊しているでしょうか? – MarkJ

+0

これは私の推測でもありますが、ウィンドウハンドルやその他のハンドルをC++コードにキャッシュする可能性は高いですが、リセット後も無効になっていますが、コードはまだそれを使用しようとしています。 – DarinH

+0

あなたは、失敗したIDにログを記録するだけでC++コードをロードしようとしましたか? – 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

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

eaxが無効であり、その結果、失敗しました。

私の推測では、実行しようとしているEd20.dllにメニューハンドラがありますが、このDLLはアンロードされています(<Unloaded_Ed20.dll>のように)。 1. DLLがアンロードされた理由、または2.アンロード後にハンドラーがまだ登録されている理由を調べる必要があります。

+0

古典的な参照カウントのバグのようなにおいがします。 –

関連する問題