トップページtech
30コメント8KB

Inside Visual Basic

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
Visual Basicの内部を語るスレ
0002デフォルトの名無しさんNGNG
Variant
0003デフォルトの名無しさんNGNG
あれも一種のMFCと考えて良いですか?
0004デフォルトの名無しさんNGNG
>>3
意味不明
0005デフォルトの名無しさんNGNG
共用体だよ。
0006デフォルトの名無しさんNGNG
私の調査によると、
VisualBasicは内部では機械語で動いてるらしいです。
ショック!!
0007デフォルトの名無しさんNGNG
1=3=5
ウザイ
0008デフォルトの名無しさんNGNG
MSVBVMxx.DLL
0009デフォルトの名無しさんNGNG
VBはプログラミング言語ではなく高機能な
オートメーションコントローラです。
A.C.自作した人ならわかるはず。
0010デフォルトの名無しさんNGNG
A.C.ってなんですか?

アーマークラス?
LOが一番いいの?
0011デフォルトの名無しさんNGNG
スコーピオンドック
0012デフォルトの名無しさんNGNG
"A"utomation "C"ontroller
0013デフォルトの名無しさんNGNG
After Century
0014デフォルトの名無しさんNGNG
おらは>>10に一票だな。
0015デフォルトの名無しさんNGNG
オーラバトラー
0016デフォルトの名無しさんNGNG
>>15
0017デフォルトの名無しさんNGNG
Allegro Commonlisp
0018デフォルトの名無しさんNGNG
Adult Children
0019デフォルトの名無しさんNGNG
Alternating Current
0020デフォルトの名無しさんNGNG
ヘビーメタル
0021デフォルトの名無しさんNGNG
>>15
段場印

>>1
スレタイトルが一瞬、Inprise Visual Basicに見えた。鬱氏。
0022IUnknownNGNG
Visual Basic の言語仕様に一言言わせてもらえば、「オブジェクトの参照」というデー
タ型の概念は他の言語と大きく離れて独自過ぎますね。まずクラスのデフォルトに指定
されているインターフェイスはインターフェイス名ではなくクラス名で扱われること自
体が不満。オブジェクトとインターフェイスを一緒くたにして考えるこの仕様には昔随
分悩まされたものです。「オブジェクトの参照」はオブジェクトへのアクセスポイント
という意味ですからインターフェイスにあたることはわかります。ただ多くの人は「オ
ブジェクトの参照」というよりは「オブジェクトそのもの」として捉えてしまっている
ような気がします。例えば "Set ステートメントでオブジェクトを取得しましょう" と
かね。初心者がVBでCOMインターフェイスプログラミングを行おうとするとこのあたり
の曖昧さがいろいろ影響してくるのではないでしょうかね。

とはいうものの個人的には IUnknown::QueryInterface() メソッドのラッピングに関し
てはなかなか面白い方法だと思います。

Dim xxx As New ITest
Dim yyy As ILesson
Set yyy = xxx
00231NGNG
荒れてる。
当方、SDKやMFCはある程度知ってるんだけど、VBはやったこと無いのです。

それで、SDK<->VBでの対応関係が分かれば、片方しか知らない人達にとって
有益な情報になると思ったんだけど駄目かな?
0024NGNG
>>22
SDK的で書くとこんな感じになるのでしょうか?

>Dim xxx As New ITest
ITest* xxx = NULL;
CoCreateInstance(CLSID_???, IID_ITest, ?,&xxx);

>Dim yyy As ILesson
ILesson* yyy = NULL;

>Set yyy = xxx
xxx->QueryInterface(IID_ILesson, &yyy);
0025デフォルトの名無しさんNGNG
int WINAPI WinMain(unko,unklo,unko,unko)
main()

氏ねって感じじゃない?
0026デフォルトの名無しさんNGNG
C言語の質問なんですがソートプログラムを作りたいので
手伝ってもらえませんか?
0027デフォルトの名無しさんNGNG
>26
再帰不能ですね?
0028IUnknownNGNG
>SDK的で書くとこんな感じになるのでしょうか?
文献によっては IUnknown 経由にしているところもあるようです。

>Dim xxx As New ITest
HRESULT hr;
LPUNKNOWN punk = NULL;
ITest* xxx = NULL;
hr = CoCreateInstance(clsid, NULL, CLSCTX_SERVER, IID_IUnknown, (void FAR* FAR*) &punk);
hr = punk->QueryInterface(IID_ITest, (void FAR* FAR*) &xxx);
punk->Release();

ちなみにプログラマティックID でオブジェクトを起動する CreateObject 関数の場合は

hr = CLSIDFromProgID("Test.Application", &clsid);

で CLSID を取得します。あとは New と同じです。
このあたりのことは COM に関する書籍で結構解説されていたりします。


>当方、SDKやMFCはある程度知ってるんだけど、VBはやったこと無いのです。
>それで、SDK<->VBでの対応関係が分かれば、片方しか知らない人達にとって
>有益な情報になると思ったんだけど駄目かな?

独特な言語使用ですが内部で行われている処理を理解すれば一気に視野は
広がると思いますよ。SDK を知っているのでしたらなおさらです。
VB はうわべだけを理解しても面白くない言語ですから。
私なんかは VB でアプリケーションを開発するよりもそのアーキテクチャを知るほうが
面白くてどんどん脱線していきました。かなり昔ですけど、私も 9 さんのようにオート
メーションコントローラを作ったことがありまして、そのときに参考にしたのが VB の
アーキテクチャでした。一部では忌み嫌われている VB でしょうが私はそのつくりに
結構感心したものです(もちろんすべてにおいてではないですよ)。
アーキテクチャを理解することはしっかりとした基礎を築くことに他なりませんから
決して無駄な時間になるとは思いませんし、その基礎があればこそ応用の積み重ねも
スムースに行えるようになると思います。
0029デフォルトの名無しさんNGNG
VISUAR BASIKE
0030NGNG
>>28
こーゆーのって文献あるんですか?

COMについては良く分からないんですが、自分なりにVB内部をイメージすると
VBのEXEはコンパイル時に、WinMainとリンクされて、
VBランタイムDLLと静的リンクする。

実行されると、WinMainからユーザのmainが呼ばれる。
VBランタイムがFORMをCreateWindow()する。WM_CREATEで
ユーザのform_load()が呼ばれる。
WM_CREATEを受け取ってから、form_loadが呼ばれるまでに
なんかOLE的な構造で呼ばれるってことで良いのかなぁ
■ このスレッドは過去ログ倉庫に格納されています