エディタの改善その他
Posted: 2009年7月20日(月) 21:45
ActiveBasic Version.4.24.00 を使用しています。
プログラム作成時およびプログラム実行時に気になる箇所がありますのでお知らせします。
(使用環境)
Windows XP Version 2002 Service Pack 3
Celeron 1.21GB RAM
[プログラム作成時]
1. システムメニューのないウィンドウの「テスト」表示を行うと消すことができません。
2. ウィンドウ数が13個以上になると編集画面が正しく表示されなくなります。
[プログラム実行時]
1. 平方根(Sqr)計算でまれに無限ループに入ることがあります。
(平方根関数の収束条件に問題があるのではないでしょうか。)
2. 呼び出しのない(使用されない)プロシージャを含むプログラムをコンパイルすると
呼び出しのないプロシージャの構文チェックが行われていないようです。
呼び出しのないプロシージャ内にバグがあってもコンパイルできますが、
プログラムを実行すると、動作が不安定になることがあります。
(計算結果が不正、異常終了が発生する等)
呼び出しのないプロシージャの構文チェックが正しく行われるようにならないでしょうか。
3. 実行時エラーが発生するとWindowsシステムにより強制終了されます。
まれにWindowsそのものが終了することがあります。
AB5は例外処理が可能になるようですが、AB5の完成が遅れているようなので、
AB4に例外処理を取り入れていただけないでしょうか。
(エラー表示があれば原因が特定しやすい。安定したプログラムが開発できる。)
4.文字列を多用するプログラムは、実行速度が遅くなります。
下記のように[\Include\system]内の"_System_HeapStringFree"関数を変更すると速くなります。
変更に問題がないか検討をお願いします(変更行は1行のみ)。
Sub _System_HeapStringFree(BufPtr As VoidPtr)
Dim i As Long
Dim pPtr As DWord
EnterCriticalSection(_System_CriticalSection)
' For i=0 To _System_AllocatedStringInfo.num-1 (元のコード)
For i=_System_AllocatedStringInfo.num-1 To 0 Step -1' (変更コード)
pPtr=GetDWord(_System_AllocatedStringInfo.pAddress+i*4)
If pPtr=BufPtr Then
HeapFree(_System_hProcessHeap,0,BufPtr-4)
_System_AllocatedStringInfo.num=_System_AllocatedStringInfo.num-1
For i=i To _System_AllocatedStringInfo.num-1
SetDWord(_System_AllocatedStringInfo.pAddress+i*SizeOf(DWord),GetDWord(_System_AllocatedStringInfo.pAddress+(i+1)*SizeOf(DWord)))
Next
LeaveCriticalSection(_System_CriticalSection)
Exit Sub
End If
Next
LeaveCriticalSection(_System_CriticalSection)
If BufPtr Then
OutputDebugString(Ex"未知の文字列が解放されようとしました。\r\n")
End If
End Sub
プログラム作成時およびプログラム実行時に気になる箇所がありますのでお知らせします。
(使用環境)
Windows XP Version 2002 Service Pack 3
Celeron 1.21GB RAM
[プログラム作成時]
1. システムメニューのないウィンドウの「テスト」表示を行うと消すことができません。
2. ウィンドウ数が13個以上になると編集画面が正しく表示されなくなります。
[プログラム実行時]
1. 平方根(Sqr)計算でまれに無限ループに入ることがあります。
(平方根関数の収束条件に問題があるのではないでしょうか。)
2. 呼び出しのない(使用されない)プロシージャを含むプログラムをコンパイルすると
呼び出しのないプロシージャの構文チェックが行われていないようです。
呼び出しのないプロシージャ内にバグがあってもコンパイルできますが、
プログラムを実行すると、動作が不安定になることがあります。
(計算結果が不正、異常終了が発生する等)
呼び出しのないプロシージャの構文チェックが正しく行われるようにならないでしょうか。
3. 実行時エラーが発生するとWindowsシステムにより強制終了されます。
まれにWindowsそのものが終了することがあります。
AB5は例外処理が可能になるようですが、AB5の完成が遅れているようなので、
AB4に例外処理を取り入れていただけないでしょうか。
(エラー表示があれば原因が特定しやすい。安定したプログラムが開発できる。)
4.文字列を多用するプログラムは、実行速度が遅くなります。
下記のように[\Include\system]内の"_System_HeapStringFree"関数を変更すると速くなります。
変更に問題がないか検討をお願いします(変更行は1行のみ)。
Sub _System_HeapStringFree(BufPtr As VoidPtr)
Dim i As Long
Dim pPtr As DWord
EnterCriticalSection(_System_CriticalSection)
' For i=0 To _System_AllocatedStringInfo.num-1 (元のコード)
For i=_System_AllocatedStringInfo.num-1 To 0 Step -1' (変更コード)
pPtr=GetDWord(_System_AllocatedStringInfo.pAddress+i*4)
If pPtr=BufPtr Then
HeapFree(_System_hProcessHeap,0,BufPtr-4)
_System_AllocatedStringInfo.num=_System_AllocatedStringInfo.num-1
For i=i To _System_AllocatedStringInfo.num-1
SetDWord(_System_AllocatedStringInfo.pAddress+i*SizeOf(DWord),GetDWord(_System_AllocatedStringInfo.pAddress+(i+1)*SizeOf(DWord)))
Next
LeaveCriticalSection(_System_CriticalSection)
Exit Sub
End If
Next
LeaveCriticalSection(_System_CriticalSection)
If BufPtr Then
OutputDebugString(Ex"未知の文字列が解放されようとしました。\r\n")
End If
End Sub