ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月29日(金) 10:14

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 1 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2005年12月24日(土) 03:25 
オフライン

登録日時: 2005年7月19日(火) 07:02
記事: 183
お住まい: 宮城県
リストビューのソートの方法」のスレッドからの続きです。
かなり話をそらしてしまったので、別スレッドにします。


≫イグトランスさん
レスが遅れてしまい、すいません。

混乱気味なので、かなり端折った理解をしようとおもいます^^;
つまり、クラスだろうが仮想関数だろうがアドレス自体は常に存在する。
コールバック関数として指定するときに問題になるのは、
コンパイル時点で呼び出すべきアドレスが決定しているかいないか。
クラスメソッドの場合は、継承にともなうオーバーライドなど(?)のために、
呼び出すまでアドレスが(普通の方法では)分からないので、
static以外ではコールバック関数としては指定できない、というこですね。
まぁその実は引数の数の問題(オブジェクトへのポインタは、なるほどと思いました)とかが
理由なのでしょうけど、簡単のために、上記のように、そしてコンパイラのエラー文に出た
「アドレスが見つからない」故だと理解しておきます^^;
COMオブジェクトはさっぱりわかりませんのでスルー(汗)。
引用:
いや,CreateThreadの場合も形としてはコールバック関数です。
ただスレッドを作るという機能が強調されるので,
特にコールバックとは言われないことが多いだけですよ。
あ、そういう意味だったんですか。
「概念上コールバック関数とは異なるものなので注意してください」という
記述があったもので、コールバック関数じゃないと思ってました^^;
http://wisdom.sakura.ne.jp/system/winap ... in143.html
引用:
SetPropに文字列ではなくアトムを使った場合は,SetWindowLongを使った場合とほぼ同じ速度だという計測結果があります。
あらら。実際はそんなに問題じゃなかったんですね。
でも私にはSetWindowLongの方法のほうが分かりやすいので、
しばらくはこちらで行こうと思います。
引用:
CWindowから派生させてウィンドゥを出すなら、その派生クラスのメンバとしてデータなり何なり持たせ放題なわけで、わざわざAPI呼び出してデータを取得するとは思えんのだが
http://hilbert.elcom.nitech.ac.jp/~taki/program.html
に共感しますので(^^)

しかし、SetClassLongですか・・・そんなのもあるんですね。
今のところは「そういうのがある」とだけ覚えておきます^^;
あまり一気には使いこなせません~(汗)。




≫NoWestさん
引用:
もう一度全体の流れを詳しく順に書きます。
あぁ、すいません(>_<)
その流れは分かってたんですが・・・「OSからユーザーがわに制御が
呼び戻されるのがコールバック関数。でも、ユーザーが自作すること
もできるとは・・・どういうことだ?」と疑問に思ったのでした。

つまり、渡した制御が渡した側に戻すされることがコールバック。
一般には、OSに渡した窓制御からメッセージ通知によって
処理がユーザーに戻される(ユーザーが好きに記述できる)ことを
コールバック関数と呼ぶ、ってことですね。
引用:
Windowsのシステムの特定の処理に対して、プログラマが選択的に処理を組むことができる仕組みがコールバックです。
という説明が一番しっくりきました。

そして、窓制御に、Windowsが提供しているものに限らず、
自作の関数であっても「制御が戻される」という観点で見て、
それをコールバック関数と呼ぶものがある(そう区分される)、
ってことですね。




いつものように蛇足ですけど。
コールバック関数うんぬんのことは全部、C++で組んでて思った疑問だったのでした^^;
窓プロシージャやらサブスレッドをメソッドに持たせたりしようとして
ぶつかった問題でした。(今は解決済み)
それで、このフォーラムでリストビューのソートを調べてて、
コールバック関数がまた出てきたので、
「コールバック関数とそれ以外の区別はどこなんだ?」
と気になったので、ちょっと蛇足に書いたのですが・・・
私としてはC++で始まった疑問だったので、ABのこのフォーラムで
こんなに詳しく解説していただくと、なんか悪い気がしますね。
すいません^^;
イグトランスさん、NoWestさん、ありがとうございました。


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 1 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: Semrush [Bot] & ゲスト[18人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean