関数ポインタ型メンバ変数
Posted: 2006年2月22日(水) 18:14
				
				Ver4.21にて
↓をデバッグ実行(F2)しようとすると、コンパイラが不正な処理で落ちます。
ところが、デバッグコンパイル(F4)やリリースコンパイル(F7)では問題なくコンパイルが完了し、動作も問題ありませんでした。
また、
・関数ポインタ型メンバ変数の数を減らす
・"あああああ..."の文字列を変更する
・mallocの行末にコメントを何文字か書く
・AddressOf演算子のところを0に置き換える
などとするとデバッグ実行が通るようになったりします。
デバッグコンパイル・リリースコンパイルが通るのでおそらくABのバグであるとは思いますが、もしかしたら自分が何かやっちゃいけないことをしてしまっているのかもしれないので、何か変な点があれば指摘をお願いします。
			↓をデバッグ実行(F2)しようとすると、コンパイラが不正な処理で落ちます。
ところが、デバッグコンパイル(F4)やリリースコンパイル(F7)では問題なくコンパイルが完了し、動作も問題ありませんでした。
コード: 全て選択
#console
Class HideMenuItem
Private
	ItemStr As BytePtr
	pfDraw As *Sub()
	pfMain As *Sub()
	pfSet As *Sub()
Public
	Sub ~HideMenuItem()
		free(ItemStr)
	End Sub
	Sub Set(str As BytePtr, pfMain As VoidPtr, pfSet As VoidPtr, pfDraw As VoidPtr)
		ItemStr = malloc(lstrlen(str) + 1)
		lstrcpy(ItemStr, str)
		This.pfMain = pfMain
		This.pfSet = pfSet
		This.pfDraw = pfDraw
	End Sub
	Sub CallMain()
		pfMain()
	End Sub
	Sub CallSet()
		pfSet()
	End Sub
	Sub CallDraw()
		pfDraw()
	End Sub
End Class
Dim a As Long
Dim ovc As HideMenuItem
ovc.Set("ああああああああああああああ", AddressOf(Func),AddressOf(Func),AddressOf(Func))
ovc.CallMain()
ovc.CallSet()
ovc.CallDraw()
Input a
Sub Func()
	Print "Func関数が呼び出されました"
End Sub・関数ポインタ型メンバ変数の数を減らす
・"あああああ..."の文字列を変更する
・mallocの行末にコメントを何文字か書く
・AddressOf演算子のところを0に置き換える
などとするとデバッグ実行が通るようになったりします。
デバッグコンパイル・リリースコンパイルが通るのでおそらくABのバグであるとは思いますが、もしかしたら自分が何かやっちゃいけないことをしてしまっているのかもしれないので、何か変な点があれば指摘をお願いします。