ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年3月28日(木) 23:11

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




返信する
ユーザー名:
件名:
メッセージ本文:
メッセージを入力してください。60000 字まで入力できます。 

フォントサイズ:
フォントカラー
オプション:
BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF
BBCode を無効にする
URL を自動的にパースしない
クイズ
お手数ですがカタカナで「エービー」と4文字を入力してください。:
答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。
   

トピックのレビュー - [AB3](+[AB2])呼び出したDLL側で窓を作成して処理する。
作成者 メッセージ
  記事の件名:  Re: [AB3](+[AB2])呼び出したDLL側で窓を作成して処理する。  引用付きで返信する
引用:
自分もよく知らなかったので調べてみましたが,ABのVirtualって,C++とかのとは全く違うようです。
わざわざ調べていただいてありがとうございますm(_ _)m
ふむ。全然違うものなんですね^^;
私の中ではVirtual宣言=仮想関数=オーバーライドだと思ってたんですが、
これが間違いでないにしても、全てじゃなかったんですね(^^;)。
現在のABは
引用:
仮想関数は主にCOMインターフェイスを定義する際に活用します。
にターゲットを絞っているんですね。


気になった理由は、
ABでCreateWindow()+WndProcをクラス化してみようと思ったからです。
そうすると継承の際にメンバ関数のオーバーライドが使えないと不便なわけで、
「AB4にはVirtual宣言も導入されてたよな・・・」と思ったしだいでした。 ABにはRADがありますから、そんなに必要ないですかw よってノープロブレムかな(笑)
引用:
※自分はABでもC++でもVirtualを使ったことはありません。(核爆)
ちなみに私は、つい最近C++で
「おぉ、仮想関数って便利じゃねーか。継承するときは様々だな☆」って
思ったばかりでして(つーか、そのための仕様ですね^^;)。だから使ってみたいのです(笑)。


http://wisdom.sakura.ne.jp/
そこのサイト様は、すごく利用させてもらってます。分かりやすいですよね☆
私はそこでC/C++の基本と、C/C++でのウィンドウの生成を学びました(^^)

引用:
AB5ではC++などと同じように仮想関数が扱えるようになると思います。
そうなんですか。
ではそのときを楽しみに待ちます。
詳しい情報をありがとうございました。おかげですっきりしました。
投稿記事 Posted: 2005年12月11日(日) 15:52
  記事の件名:   引用付きで返信する
そこのサイトにはC++のもありますよ。
http://wisdom.sakura.ne.jp/programming/cpp/cpp31.html

そしておそらくAB5ではC++などと同じように仮想関数が扱えるようになると思います。
(AB4.2でそうなるという話でしたがどうやらAB4.2は出ないようなので)
投稿記事 Posted: 2005年12月11日(日) 13:13
  記事の件名:  Re: [AB3](+[AB2])呼び出したDLL側で窓を作成して処理する。  引用付きで返信する
引用:
あ、蛇足なんですけどせっかくなので≫Sinryowさん
AB4のクラスで、仮想メソッドって、
関数の形を宣言するだけで、内容は定義できないんですか?
ヘルプを読んだ限りではそう思えたのですが、
C++だったら「オーバーライドされなかったときの動作」として
内容も定義できるんで、どうなんだろうとちょっと疑問。
自分で確かめれば良いんですが(人に聞いたほうが早い♪/マテ)
知ってましたら&気が向きましたら、お願いします^^;
自分もよく知らなかったので調べてみましたが,ABのVirtualって,C++とかのとは全く違うようです。
C++などでは淡幻星さんのおっしゃった通り「オーバーライドされなかったときの動作」なのです。
http://hwb.ecc.u-tokyo.ac.jp/current/CD ... 8BFF4.html(仮想関数についての簡単な説明。Yahooのキャッシュ)
http://wisdom.sakura.ne.jp/programming/cs/cs26.html(C#だがプログラムの例があり分かりやすい)

※自分はABでもC++でもVirtualを使ったことはありません。(核爆)
投稿記事 Posted: 2005年12月11日(日) 10:46
  記事の件名:  Re: [AB3](+[AB2])呼び出したDLL側で窓を作成して処理する。  引用付きで返信する
引用:
微妙なツッコミですが
"WinMain"という名前にすると,C言語のWindowsプログラムの始動時関数と同じ名前になるので名前を変えたほうがよいかと思われます(笑)。
あ、やっぱ気になりますか?^^;
そうですね。DLLの方WinMain()→DillWnd()に書き換えておきました。
私もちょっと気になってたのでAB2の呼び出しでAliasなんぞ使ってたのでしたし(笑)。

でもDLLの動作確認用コードの方はそのままに(こっちはEXEですし)。
窓クラスを登録して、CreateWindowして、って作業する関数ですから、
WinMain()そのままなわけで問題はないかと。
こっちの方がしっくり来るんですよね、私としては^^;
引数が違うじゃないか、というツッコミは知りません(笑)。

ん~、Cのコードから写したことがバレバレw


あ、蛇足なんですけどせっかくなので≫Sinryowさん
AB4のクラスで、仮想メソッドって、
関数の形を宣言するだけで、内容は定義できないんですか?
ヘルプを読んだ限りではそう思えたのですが、
C++だったら「オーバーライドされなかったときの動作」として
内容も定義できるんで、どうなんだろうとちょっと疑問。
自分で確かめれば良いんですが(人に聞いたほうが早い♪/マテ)
知ってましたら&気が向きましたら、お願いします^^;
投稿記事 Posted: 2005年12月11日(日) 02:40
  記事の件名:  Re: [AB3](+[AB2])呼び出したDLL側で窓を作成して処理する。  引用付きで返信する
微妙なツッコミですが
"WinMain"という名前にすると,C言語のWindowsプログラムの始動時関数と同じ名前になるので名前を変えたほうがよいかと思われます(笑)。
投稿記事 Posted: 2005年12月11日(日) 02:01
  記事の件名:  [AB3](+[AB2])呼び出したDLL側で窓を作成して処理する。  引用付きで返信する
「おぉ!!できるんだ、こういうことも☆」ってノリが全てです(笑)。

【やってること】
DLLを呼び出し、呼び出した先のDLLの内部でウィンドウを作成し、
呼び出し元のウィンドウはロック。
処理が終わった後に、DLL側のウィンドウを破棄し、
ロックを解除し制御を、呼び出し元に返します。
動作確認AB3.13+AB2.59


【以下、コードなど】
『プロジェクト→DLL-プロシージャライブラリ』で作成。
※DLL内部でグローバル変数を使っていることに注意。
  ['DLLのインスタンス記録用]の部分
※DLLエントリポイント云々[DllMain()の中]にも一行書き込んでいることに注意。
  ['窓作成に使うのでDLLのインスタンスを保持。]の部分 それの呼び出し元のAB2のコードの例は以下です。
DLLファイル名をDLLonWnd.dllとしています。
スペースを押すと、DLLの中のDllWnd()を呼び出して窓を表示します。
それを閉じればAB2側の窓に制御が戻ります。
AB2でプログラムを組んでいて、
負荷の高い処理はAB3/AB4で作ったDLLを呼び出して処理する、
などという変なことをしている人(=私の仲間w)にしか
参考にならないかもしれません(苦笑)。


ついでに。
DLL作成のときは、デバックモードが無いので、
大抵別途に組んで動作を確かめてから関数だけをコピペしてますよね、きっと。
そのときの『動作の確かめ用』のコードも以下に載せておきます。
『プロジェクト→EXE-N88プロンプトベース』で作成。
でも当然ながらN88BASICのプロンプト画面は使いません^^;
使ったらDLLに移したときにエラーします。
あ、Print文とかでデバッグするのは楽になるかも?
(『EXE-ベース無し』を選べばよかったのかな?)
なにはともあれ、そのときのコードです。 以上二つをプロジェクトに参加させて下さい。
なお、こちらは親ウィンドウ(=DLLでの呼び出し元の窓)であるプロンプトウインドウはロックしていません。



ふむ。
『Win32プログラミング講座 ~ Step14. DLLを作る ~』で思いっきり
DLLに窓ハンドル渡して内部で保存ダイアログなどを呼んでいるわけだから、
出来て当然なのか^^;

12/11 2:30修正しました。
投稿記事 Posted: 2005年12月11日(日) 00:27

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


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