関数ポインタについて

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 関数ポインタについて

by ゲスト » 2007年5月14日(月) 01:38

解決しました、ありがとうございました
またお騒がせして大変申し訳ありませんでした

by ゲスト » 2007年5月14日(月) 01:22

言葉足らずで申し訳ありません

クラスの中で関数を呼んだ場合何の問題もありません。
ですが、Newで出来たものを呼んだ場合アクセス違反になるんです
クラスの中で使用した場合と、->で使用した場合
は同じ事ですよね?

仕様ということでしょうか…。

by ゲスト » 2007年5月14日(月) 00:50

OnCreateはクラスの外にあります
コールバック関数の方で直接だと上手く行くんですが
他の関数だと…

by ゲスト » 2007年5月14日(月) 00:49

OnCreateはクラスの外にあります
コールバック関数の方で直接だと上手く行くんですが
他の関数だと…

Re: 関数ポインタについて

by ゲスト » 2007年5月13日(日) 22:34

> クラス内のコールバック関数にて関数ポインタを使用しています。
> AddressOfでアドレスを取得し代入する訳ですが
> クラスの変数を使用した場合、関数ポインタの箇所でアクセス違反となります。
>
> > thisポインタを引数にすれば良いとありましたが、どうすれば良いのでしょうか
> Dim a As *A
> a=New A
>
> a->Message(WM_CREATE,AddressOf(OnCreate))
>
> Sub OnCreate()
> OutputDebugString("ok")
> End Sub[/code][/hide]
の部分が良く分からないのですが、OnCreateはクラスの外にあるのでしょうか?
それとも内にあるのでしょうか?

OnCreateがクラスの外にあってエラーとなるのでしたらActiveBasicのバグですが
クラスの内にあるのでしたら仕様です。

この場合、OnCreate()には一見すると引数が無いように見えますが、実際には
OnCreate(this As *A)という引数が隠れています。

ですから、下記のように関数ポインタに引数を追加すれば動くのではないかと思います。

関数ポインタについて

by ゲスト » 2007年5月13日(日) 21:59

クラス内のコールバック関数にて関数ポインタを使用しています。
AddressOfでアドレスを取得し代入する訳ですが
クラスの変数を使用した場合、関数ポインタの箇所でアクセス違反となります。
thisポインタを引数にすれば良いとありましたが、どうすれば良いのでしょうか

ページトップ