ab.com コミュニティ https://www.activebasic.com/forum/ |
|
ActiveBasic 4.24 デバッグ中の不具合 https://www.activebasic.com/forum/viewtopic.php?t=2182 |
ページ 1 / 1 |
作成者: | hira [ 2007年12月18日(火) 00:32 ] |
記事の件名: | ActiveBasic 4.24 デバッグ中の不具合 |
ノーマルウィンドウベースのプロジェクトにおいて、 ' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。 の位置に次のようなコードを入力します。 コード: Type IDispatchVtbl 'IUnknown QueryInterface As VoidPtr AddRef As VoidPtr Release As VoidPtr 'IDispatch GetTypeInfoCount As VoidPtr GetTypeInfo As VoidPtr GetIDsOfNames As VoidPtr Invoke As VoidPtr End Type Type IDispatch_Internal lpVtbl As *IDispatchVtbl m_refCnt As DWord pSrcUnk As *IUnknown dwDocCookie As DWord End Type Type IDocHostUIHandlerVtbl 'IUnknown QueryInterface As VoidPtr AddRef As VoidPtr Release As VoidPtr 'IDocHostUIHandler ShowContextMenu As VoidPtr ShowUI As VoidPtr GetHostInfo As VoidPtr HideUI As VoidPtr UpdateUI As VoidPtr EnableModeless As VoidPtr OnDocWindowActivate As VoidPtr OnFrameWindowActivate As VoidPtr ResizeBorder As VoidPtr TranslateAccelerator As VoidPtr GetOptionKeyPath As VoidPtr GetDropTarget As VoidPtr GetExternal As VoidPtr TranslateUrl As VoidPtr FilterDataObject As VoidPtr End Type Type IDocHostUIHandler_Internal lpVtbl As *IDocHostUIHandlerVtbl ole_client_site As *IOleClientSite_Internal html_window As HWND End Type Type IOleClientSiteVtbl 'IUnknown QueryInterface As VoidPtr AddRef As VoidPtr Release As VoidPtr 'IOleClientSite SaveObject As VoidPtr GetMoniker As VoidPtr GetContainer As VoidPtr ShowObject As VoidPtr OnShowWindow As VoidPtr RequestNewObjectLayout As VoidPtr End Type Type IOleClientSite_Internal lpVtbl As *IOleClientSiteVtbl in_place As *IOleInPlaceSite_Internal doc_host_ui_handler As *IDocHostUIHandler_Internal web_browser_events As *IDispatch_Internal '*DWebBrowserEvents2 End Type Type IOleInPlaceFrameVtbl 'IUnknown QueryInterface As VoidPtr AddRef As VoidPtr Release As VoidPtr 'IOleInPlaceFrame GetWindow As VoidPtr ContextSensitiveHelp As VoidPtr GetBorder As VoidPtr RequestBorderSpace As VoidPtr SetBorderSpace As VoidPtr SetActiveObject As VoidPtr InsertMenus As VoidPtr SetMenu As VoidPtr RemoveMenus As VoidPtr SetStatusText As VoidPtr EnableModeless As VoidPtr TranslateAccelerator As VoidPtr End Type Type IOleInPlaceFrame_Internal lpVtbl As *IOleInPlaceFrameVtbl End Type Type IOleInPlaceSiteVtbl 'IUnknown QueryInterface As VoidPtr AddRef As VoidPtr Release As VoidPtr 'IOleInPlaceSite GetWindow As VoidPtr ContextSensitiveHelp As VoidPtr CanInPlaceActivate As VoidPtr OnInPlaceActivate As VoidPtr OnUIActivate As VoidPtr GetWindowContext As VoidPtr Scroll As VoidPtr OnUIDeactivate As VoidPtr OnInPlaceDeactivate As VoidPtr DiscardUndoState As VoidPtr DeactivateAndUndo As VoidPtr OnPosRectChange As VoidPtr End Type Type IOleInPlaceSite_Internal lpVtbl As *IOleInPlaceFrameVtbl ole_client_site As *IOleClientSite_Internal ole_in_place_frame As *IOleInPlaceFrame_Internal browser_object As VoidPtr hwnd As HWND End Type Type IStorageVtbl 'IUnknown QueryInterface As VoidPtr AddRef As VoidPtr Release As VoidPtr 'IStorage CreateStream As VoidPtr OpenStream As VoidPtr CreateStorage As VoidPtr OpenStorage As VoidPtr CopyTo As VoidPtr MoveElementTo As VoidPtr Commit As VoidPtr Revert As VoidPtr EnumElements As VoidPtr DestroyElement As VoidPtr RenameElement As VoidPtr SetElementTimes As VoidPtr SetClass As VoidPtr SetStateBits As VoidPtr Stat As VoidPtr End Type Type IStorage_Internal lpVtbl As *IStorageVtbl End Type Dim pSink_WebBrowser As *IDispatch_Internal Dim ole_client_site As *IOleClientSite_Internal Dim storage As *IStorage_Internal Dim ole_in_place_site As *IOleInPlaceSite_Internal Dim ole_in_place_frame As *IOleInPlaceFrame_Internal Dim doc_host_ui_handler As *IDocHostUIHandler_InternalCreateイベントを次のように追加します。 コード: Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT) Debug 'IDispatch(Sink) pSink_WebBrowser=GlobalAlloc(GPTR,SizeOf(IDispatch_Internal)) 'IStorage storage = GlobalAlloc(GPTR,SizeOf(IStorage_Internal)) 'IOleInPlaceFrame ole_in_place_frame=GlobalAlloc(GPTR,SizeOf(IOleInPlaceFrame_Internal)) 'IOleInPlaceSite ole_in_place_site=GlobalAlloc(GPTR,SizeOf(IOleInPlaceSite_Internal)) 'IDocHostUIHandler doc_host_ui_handler=GlobalAlloc(GPTR,SizeOf(IDocHostUIHandler_Internal)) 'IOleClientSite ole_client_site=GlobalAlloc(GPTR,SizeOf(IOleClientSite_Internal)) GlobalFree(pSink_WebBrowser) GlobalFree(storage) GlobalFree(ole_in_place_frame) GlobalFree(ole_in_place_site) GlobalFree(doc_host_ui_handler) GlobalFree(ole_client_site) Debug End Subこのとき、Debug命令でプログラムの実行が一時停止するので、そこで「実行」をクリックすると、次のDebug行が反転した後、デバッガが強制終了してしまいます。 「実行」をクリックする代わりにステップ実行してもGlobalFree(ole_client_site)あたりで強制終了します。 ステップ実行の途中でデバッガに強制終了されて思うようにデバッグが進みません。調査をお願いします。当方の環境 Windows XP Home SP2、ActiveBasic 4.24です。 ※本当はもっと複雑なプログラムで、そこからエラーになる要素を抜き出したものです。 |
作成者: | hira [ 2007年12月18日(火) 14:50 ] |
記事の件名: | 追加 |
不具合の原因らしきものを発見しました。 コード: Type A p As *B End Type Type B p As *A End Type Dim ptr As *A,udt As B Debug ptr=malloc(SizeOf(A)) ptr->p=VarPtr(udt) udt.p=ptr free(ptr) Debug上の例では、ptr->pにBのポインタが、udt.pにAのポインタが入っていますが、このようにするとデバッガは変数の内容を一覧する際に無限ループに陥ってしまい、それで強制終了するものと思われます。 こんなコードって書いてはいけないんですかね…?(^^;; |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |