ab.com コミュニティ https://www.activebasic.com/forum/ |
|
使用しているABのバージョン https://www.activebasic.com/forum/viewtopic.php?t=1844 |
ページ 1 / 1 |
作成者: | のぶあや [ 2007年3月05日(月) 21:44 ] |
記事の件名: | 使用しているABのバージョン |
AB5の開発が進んでいますが、皆さんはどのバージョンを使っていますか? ちなみに自分はAB4.24を使っています。 それと今回AB4.24でクラスに関するバグ(だと思う)を見つけたのですが、 バグ報告所に投稿したほうがいいですかね? ver2,3はサポート対象外とされてますが、AB4はどうなのでしょうか? 新たに機能等の追加はなくてもかまわないのですが、 バグの修正くらいはしてくださるとありがたいですね。 一応発見したバグ(だと思う)を載せときます 必要があればバグ報告所に載せなおしますが [ここをクリックすると内容が表示されます]
コード: Dim DropFunction As *Sub(hDrop As HDROP) 'メンバ変数だと例外エラーになる Class MascotBasicSystem Private 'DropFunction As *Sub(hDrop As HDROP) 'メンバ変数では例外エラーになる Public Sub Startup() 'SetMenuTitle, SetMenuTopic, GetMenuTitleIDはグローバルな関数ポインタ '第3引数は関数ポインタ '第4引数はメニュータイトルID、第3引数が0のとき、これで指定したメニューを開く(第5引数は無視される) '第5引数はTRUEでウィンドウを表示したまま、FALSEで閉じる Dim TitleID As DWord TitleID=GetMenuTitleID("終了") SetMenuTopic(TitleID, "終了確認", 0, 0, 0) SetMenuTopic(TitleID, "続ける", AddressOf(NullFunction), 0, FALSE) SetMenuTopic(TitleID, "終了する", AddressOf(EndMascot), 0, TRUE) TitleID=GetMenuTitleID("表示方法") SetMenuTopic(TitleID, "最前面表示に設定する", AddressOf(SetWindow_TopMost), 0, TRUE) SetMenuTopic(TitleID, "最前面表示を解除する", AddressOf(SetWindow_NoTopMost), 0, TRUE) SetMenuTopic(TitleID, "", 0, 0, 0) SetMenuTopic(TitleID, "閉じる", AddressOf(NullFunction), 0, FALSE) SetMenuTopic(TitleID, "戻る", 0, 1, 0) TitleID=GetMenuTitleID("設定") SetMenuTopic(TitleID, "マスコットにドラッグしたときの処理", AddressOf(SetDropFunction), 0, TRUE) SetMenuTopic(TitleID, "戻る", 0, 1, 0) DropFunction=0 End Sub Private 'マスコットの終了 Sub EndMascot() PostMessage(hMainWnd, WM_DESTROY,0,0) End Sub 'マスコットの表示設定(最前面ウィンドウのON,OFF) Sub SetWindow_TopMost() SetWindowPos(hMainWnd, HWND_TOPMOST As HWND, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOREDRAW) End Sub Sub SetWindow_NoTopMost() SetWindowPos(hMainWnd, HWND_NOTOPMOST As HWND, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOREDRAW) End Sub 'マスコットにファイルがドロップされたとき Sub DropFile(hDrop As HDROP) 'ドロップされたときの処理 If DropFunction<>0 then DropFunction(hDrop) End Sub Sub SetDropFunction() DropFunction+=1 'ここで例外処理が起きる 'デバッグウィンドウにDropFunctionの値を表示させると 'どうやら最初に設定した0ではなく、適当な数字が入っている End Sub Private Sub NullFunction() End Sub End Class呼び出す順番は 1.プログラム開始時にStartup()を呼び出す 2.SetDropFunction()を呼び出すとDropFunctionに適当な値が入っており、+1は正常に行われる 3.再びSetDropFunction()を呼び出すと先ほどと同じ値(+1する前)が入っており、+1の行で例外処理のダイアログが表示される 例外処理のダイアログは「例外処理 code:C0000096」となっており、「OK]ボタンを押しても再び同じダイアログが表示される |
作成者: | OverTaker [ 2007年3月05日(月) 22:02 ] |
記事の件名: | |
引用: AB5の開発が進んでいますが、皆さんはどのバージョンを使っていますか?
私は常に最新版を使っています。コーディングしているといつもバグを見つけてしまうので、最新版を使わざるを得ません。というより、ライブラリ開発なので当たり前ですね。引用: 一応発見したバグ(だと思う)を載せときます
詳しい事情は説明に自信がないので省略させていただきますが、たしかAddressOf()でメソッドのポインタを取得してあれこれするというのは、うまくいかなかった気がします。これらは、5.0で搭載予定のデリゲートによって解決することが出来ます。
|
作成者: | イグトランス [ 2007年3月05日(月) 22:09 ] |
記事の件名: | |
それはこういう風にすると回避できます。 コード: Sub MascotBasicSystem_EndMascot(ByRef mbs As MascotBasicSystem) mbs.EndMascot() End SubこうしてAddressOf (EndMascot)の代わりにAddressOf (MascotBasicSystem_EndMascot)とするという具合です。勿論*Sub (ByRef mbs As MascotBasicSystem)と型が変わっていますけど。 それはともかく私はAB5とAB4をいったりきたりです。最近はAB5の方が多いですが。滅多に使いませんがAB2と3もそれぞれとっておいてはあります。 |
作成者: | のぶあや [ 2007年3月06日(火) 16:51 ] |
記事の件名: | |
引用: 詳しい事情は説明に自信がないので省略させていただきますが、たしかAddressOf()でメソッドのポインタを取得してあれこれするというのは、うまくいかなかった気がします。これらは、5.0で搭載予定のデリゲートによって解決することが出来ます。
SetDropFunction()以外のメンバ関数を同様に関数ポインタで呼び出したときは上手くいっていたので、てっきり大丈夫なのだと思ってました。 引用: それはこういう風にすると回避できます。
このクラス(MascotBasicSystem)は1つしか無いので以下のコードと同義と考えてよろしいでしょうか?コード: Sub MascotBasicSystem_EndMascot(ByRef mbs As MascotBasicSystem) mbs.EndMascot() End SubこうしてAddressOf (EndMascot)の代わりにAddressOf (MascotBasicSystem_EndMascot)とするという具合です。勿論*Sub (ByRef mbs As MascotBasicSystem)と型が変わっていますけど。 以下のように書き換えたらエラーが出なくなったので大丈夫だとは思うのですが・・・ コード: Dim system As MascotBasicSystem Class MascotBasicSystem Sub Sample() ~,AddressOf(MascotBasicSystem_EndMascot), ~ End Sub Sub EndMascot() (省略) End Sub End Class 'グローバルな領域に関数を宣言 Sub MascotBasicSystem_EndMascot() system.EndMascot() End Sub実はAddressOfで取得した関数ポインタはDLLに送り、 DLLで関数ポインタから関数を実行しているので、なるべく引数はとりたくないんです。 |
作成者: | イグトランス [ 2007年3月06日(火) 17:58 ] |
記事の件名: | |
> このクラス(MascotBasicSystem)は1つしか無いので以下のコードと同義と考えてよろしいでしょうか? とりあえずはそれで構わないです。 こういう場合を考えてか,Windows APIでは予めEnumWindowのように関数へのポインタと共に1つ引数を渡すようになっています。逆に自分がこういう風に関数へのポインタを受け取るときには,そういう風にしてクラスメソッドもコールバックできるようにしましょうということになります。これはデリゲートが導入されても変わりません。 |
作成者: | たかせ [ 2011年1月25日(火) 21:11 ] |
記事の件名: | AB5CP4がメインです |
私はAB5CP4をメインとしてAB4.24は動作確認用として使用します。 とりわけAB5CP4はIDEのタブがTHE TEXT PRO版に類似していて大変気に入ってます。 本当はAB5CP5を使うのがベストですがなにしろEXEのサイズが700KB以上になるので。 2014年9月11日修正 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |