関数ポインタの返り値

ActiveBasicのバグと思われる不具合を発見された方は、こちらから知らせていただけると助かります。
返信する
メッセージ
作成者
NoWest
記事: 264
登録日時: 2005年5月31日(火) 10:52
お住まい: 高知
連絡する:

関数ポインタの返り値

#1 投稿記事 by NoWest »

一部のユーザーの間では以前から話題になっていたのですが、
*Function型の関数ポインタを実行しても返り値が取得できないというバグが
あります。確か、このバグを報告されていた方も居られたと思うのですが
山本(管理人)様の正式なコメントはまだ頂いてなかったと思います。

この件はどうなりましたでしょうか?
山本
Site Admin
記事: 535
登録日時: 2005年5月30日(月) 15:08
連絡する:

#2 投稿記事 by 山本 »

*Functionの戻り値の挙動についてですが、こちらでもバグを確認できました。次回のバージョンアップで修正しますので、今しばらくお待ちください。

念のため、もしよろしければ、問題が起きるサンプルコードを提示していただけると助かります。
NoWest
記事: 264
登録日時: 2005年5月31日(火) 10:52
お住まい: 高知
連絡する:

2005/6/21 11:16 加筆

#3 投稿記事 by NoWest »

> *Functionの戻り値の挙動についてですが、こちらでもバグを確認できました。次回のバージョンアップで修正しますので、今しばらくお待ちください。
>
> 念のため、もしよろしければ、問題が起きるサンプルコードを提示していただけると助かります。

コード: 全て選択


#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)

teflon様の情報によると
下記のようなプログラムがコンパイルできないようです。
※TypeDefを通すとうまく動く

コード: 全て選択


Function Test(pp As *Function() As DWord)
    If pp=0 Then Exit Function
    Test = pp()
End Function

AB4.01
WindowsXP
返信する