↓をデバッグ実行(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のバグであるとは思いますが、もしかしたら自分が何かやっちゃいけないことをしてしまっているのかもしれないので、何か変な点があれば指摘をお願いします。