ハンガリー記法について

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
メッセージ
作成者
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

DLLのクラス

#31 投稿記事 by イグトランス »

もしDLLからクラスを外部に公開したいと言うのであれば,現在のABでは不可能です。
やるとしたらWinAPIのようにハンドルとそれを操作する関数を公開するという形になります。

逆に言えばオブジェクト指向言語の機能を使っていないだけであって,WinAPIもオブジェクト指向になっていると言えるのです。
yu0627
記事: 154
登録日時: 2005年5月31日(火) 14:53

返信@yu0627

#32 投稿記事 by yu0627 »

> もしDLLからクラスを外部に公開したいと言うのであれば,現在のABでは不可能です。
> やるとしたらWinAPIのようにハンドルとそれを操作する関数を公開するという形になります。
>
> 逆に言えばオブジェクト指向言語の機能を使っていないだけであって,WinAPIもオブジェクト指向になっていると言えるのです。
 そうなんですか。
 あのあと自分でやってみてよくよく考えてみたらDLL内のクラス内の関数を園に出すのは難しいのがわかりました。
DLLに関しては今までと同じ構造化スタイルでやっていこうと思います。
オブジェクト指向はDLL以外のプログラムで使いたいと思います。

 ご返信ありがとうございます。
マティ
記事: 161
登録日時: 2005年8月23日(火) 00:15
お住まい: 沖縄県
連絡する:

#33 投稿記事 by マティ »

もう恥を書くのは止めようと思いましたが、自分の現役時代の逸話だけ書いておきます。
WinAPIもオブジェクト指向になっているとイグトランスさんも書いていましたので便乗です)

むかーし昔、MicrosoftOS/2に負けない本格的なOSを作成する必要がありました。
その為に、DECから引き抜いたデイブ・カトラー氏(OS開発の第1人者?)のチームにWindows NTの開発をお願いしました。そのOS(NT3.51まで)の構成は、カーネルがリング0、ドライバーがリング1、アプリケーションがリング3となっていました。
NT3.51までは理想的なOSの構造です。Win9x系&NT4.0以降はカーネル&ドライバーがリング0、アプリケーションがリング3なのでドライバーがこけるとOSも死にます)

NTを開発する際、ドライバーを含めてOSはC++で開発するようにビル・ゲーツ氏より指示があったようですが、デイブ・カトラー氏はOSの中核部分のC++化に猛烈に反対しました。NTで全面的にC++で書かれた唯一のドライバーは(OSの中核として認識されなかった)ディスプレイドライバーだけでしたが、画面の描画がWin9x系に比べてものすごく遅く、WinNTはシステムが重過ぎると不評を買ってしまいました。
(その当時、Win9xより極端に遅かったのは、ディスプレイドライバーだけですが、ユーザが一番遅いと感じるのも画面表示ですよね!)

その後、NT4.0で性能を改善しますが、ドライバーをリング0に引き上げることにより見かけ上の性能改善を行いました。
・性能と引き換えに安定性を放棄したと言います。
・なぜドライバーをリング0にすると性能が上がるかは、リクエストがあればお答えします。

余談
WinAPIもオブジェクト指向なら、実装はどうであれDLLは(データと手続きを一体化して保持している存在なので)オブジェクト指向となりますよね!

ここからは愚痴
愚痴を書こうかなって思いましたが、ABは建設的に行きましょう!
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

ドライバがリング0になっていること

#34 投稿記事 by イグトランス »

ところでNTでドライバがリング0になった理由には,
他のCPUへの移植を考えたためという話も聞いたことがあります。
これはx86の特権レベルに当たるものがものによっては,
2段階しかないというCPUもあるからということらしいです。

それとマティさんの書いた高速化やその他諸々の理由があって,
NTのドライバはリング0で動かすことにしたのでしょう。
淡幻星
記事: 183
登録日時: 2005年7月19日(火) 07:02
お住まい: 宮城県
連絡する:

うわw盛り上がっちゃいましたね^^;

#35 投稿記事 by 淡幻星 »

ちょっと目を離しましたら、びっくりの盛り上がりですね
Sinryowさん さんが書きました:スレッドの内容から外れてきているようにも思えますが,
すいません。私がオブジェクト指向の話に食いついたのが原因っぽいですね。覚えている最中なので、口出ししてみたかったんで、つい^^;
マティさん さんが書きました:使用する側から見ると、その通りだと思います。
あ、賛同いただけたw
オブジェクト指向を説明するときに、「こういえば分かりやすい」って満足できる回答に思っていたので、よかったです。おっしゃる通り、ユーザーがいかに楽をするか、って方法論ですよね。
イグトランスさん さんが書きました:ちなみに世間的にはこんな感じのようです。
さすがはWikipedia。がっつり載ってますね。
たしかな資料をありがとうございます♪
途中で読むのを放棄しましたが(爆)。
yu0627さん さんが書きました:DLLに関しては今までと同じ構造化スタイルでやっていこうと思います。
オブジェクト指向はDLL以外のプログラムで使いたいと思います
ども。最近オブジェクト指向バンザイになってきている、覚えたての初心者です。仲間ですかな?w 覚えたものは使ったみたいじゃないですか(笑)。
ちなみに、DLLであっても、内部で完結する処理に関してはクラスを使うのが便利だと思います。外部とやり取りする部分は関数で。まぁ、Sinryowさんがおっしゃってるように何でもかんでもクラス(~オブジェクト指向)にする必要はないですけど。いい所取りで楽に組んでいきましょうよ♪


蛇足。
先日c++で窓作成&プロシージャをクラス化してみました。
まぁMFCのCWndクラスのまねごとになるんですけど、便利ですw
窓作成がプロシージャまで含めて数行で終えられれます。
ABでもそんなクラスがあれば、Ver2.x時代(window+GetMsgWnd?)からの移行が楽になるんじゃないかと。誰か作ってくれないかな~w(マテ。 ・・・先ず隗より初めよ?時間あったら移植してみようかな(^^;)
yu0627
記事: 154
登録日時: 2005年5月31日(火) 14:53

返信@yu0627

#36 投稿記事 by yu0627 »

返信ありがとうございます。

>マティさん
ちょっとリングの話まで及ぶとわからないので...。
カーネルというのがOSの中核ということは知っていますが。

>淡幻星さん
あ、DLLの内部でクラスを使う方法がありましたか^^;それもそうですね。

余談
自分で公開しているソフトに雑誌紹介許可申請が来たりMIDI→WAVするソフトについての質問が来たりで大変ですw
淡幻星
記事: 183
登録日時: 2005年7月19日(火) 07:02
お住まい: 宮城県
連絡する:

Re: 返信@yu0627

#37 投稿記事 by 淡幻星 »

完全に雑談となってしまいますが・・・失礼して^^;
ちなみに私もリングは分かりません┐(´ー`)┌

余談にレスです→よって余談ですw≫yu0627さん
> あ、DLLの内部でクラスを使う方法がありましたか^^;それもそうですね。
内部で完結する例。実践コードモジュールのファイル読み書きクラスは、私がDLLでファイルに対して一定の処理をするときに楽をするために作ったのものですね。どうでもよいですが^^;

> 雑誌紹介許可申請が来たり
来ると嬉しいですよね~☆
私も先日初めて受け取り、その日一日中、頭の中はそればかりでした(笑)。

>MIDI→WAVするソフトについての質問が来たりで大変ですw
直接変換!?そんな便利なものが!?と慌ててDLさせてもらいました。
なるほど。再生しながら録音ですか。一般の方法なので、飛びついた分だけちょっとがっかり^^;
でも再生/録音開始のタイミングを気にしなくて良いのは楽ですね。
変換する際には使わせていただきます☆
yu0627
記事: 154
登録日時: 2005年5月31日(火) 14:53

返信@yu0627

#38 投稿記事 by yu0627 »

完全に余談w
私も先日初めて受け取り、その日一日中、頭の中はそればかりでした(笑)。
実のところ三通も来ています。うれしいです。
直接変換!?そんな便利なものが!?と慌ててDLさせてもらいました。
なるほど。再生しながら録音ですか。一般の方法なので、飛びついた分だけちょっとがっかり^^;
でも再生/録音開始のタイミングを気にしなくて良いのは楽ですね。
変換する際には使わせていただきます☆
直接変換は無理です。音階を記録するもの→音を記録するものの変換はすさまじいと思っています。
WAVファイルの記録方法を分析してMIDIファイルの音にして書き込む方法は...無理ですね。
これ作るのにかなり苦労しました。それなりに傑作です^^
返信する