一部のユーザーの間では以前から話題になっていたのですが、
*Function型の関数ポインタを実行しても返り値が取得できないというバグが
あります。確か、このバグを報告されていた方も居られたと思うのですが
山本(管理人)様の正式なコメントはまだ頂いてなかったと思います。
この件はどうなりましたでしょうか?
関数ポインタの返り値
-
- Site Admin
- 記事: 535
- 登録日時: 2005年5月30日(月) 15:08
-
- 記事: 264
- 登録日時: 2005年5月31日(火) 10:52
- お住まい: 高知
2005/6/21 11:16 加筆
> *Functionの戻り値の挙動についてですが、こちらでもバグを確認できました。次回のバージョンアップで修正しますので、今しばらくお待ちください。
>
> 念のため、もしよろしければ、問題が起きるサンプルコードを提示していただけると助かります。
こんな具合です。
P.S.
このバグは下記のようにするとうまく動きます。
teflon様の情報によると
下記のようなプログラムがコンパイルできないようです。
※TypeDefを通すとうまく動く
AB4.01
WindowsXP
>
> 念のため、もしよろしければ、問題が起きるサンプルコードを提示していただけると助かります。
コード: 全て選択
#N88BASIC
' ↓ ここからプログラムが実行されます
Declare Function mmsystemGetVersion Lib "WINMM" () As DWord
Dim hDLL As HANDLE
Dim pFunc As *Function() As DWord
hDLL = LoadLibrary("winmm")
pFunc = GetProcAddress(hDLL,"mmsystemGetVersion")
Print mmsystemGetVersion()
Print pFunc()
FreeLibrary(hDLL)
P.S.
このバグは下記のようにするとうまく動きます。
コード: 全て選択
#N88BASIC
' ↓ ここからプログラムが実行されます
Declare Function mmsystemGetVersion Lib "WINMM" () As DWord
TypeDef PFUNC = *Function() As DWord
Dim hDLL As HANDLE
Dim pFunc As PFUNC
hDLL = LoadLibrary("winmm")
pFunc = GetProcAddress(hDLL,"mmsystemGetVersion")
Print mmsystemGetVersion()
Print pFunc()
FreeLibrary(hDLL)
下記のようなプログラムがコンパイルできないようです。
※TypeDefを通すとうまく動く
コード: 全て選択
Function Test(pp As *Function() As DWord)
If pp=0 Then Exit Function
Test = pp()
End Function
AB4.01
WindowsXP