VB6.0技術情報

解決


す〜  2007-10-11 23:04:59  No: 137770

みなさんこんにちは
現在VB6.0で書かれたプログラムの改修をしています

元プログラムは汎用機のバッチを作った方がリプレースしたそうで
中身がかなりぐちゃぐちゃです
でも今の作業リーダは
実行速度やコーディングスタイルを云々なさる方で
暗黙の型変換は遅い  とか
そういう類のコトを仰います

ワタシ思ったのですが
例に挙げた暗黙の型変換
コレってコンパイルの段階でオプティマイズされないんでしょうか?
だからこそキャスト?明示的な型変換?があると思ってました

と  いうことで

VB6.0に関する
コンパイル・オプティマイズや
実行時の内部動作など勉強したいと思っているのですが
なかなか知りたい情報にたどりつけません
些細なことでも構いませんので
ヒントになりそうな情報をお持ちの方がいらしたら
ご教示いただきたく  お願いします

また

コーディング作法についても
(それぞれ好みもあるかと思いますが)
併せてご教示いただきたく  お願いします


魔界の仮面弁士  2007-10-12 02:54:25  No: 137771

> コレってコンパイルの段階でオプティマイズされないんでしょうか?
ActiveX コンポーネントによっては、メソッド引数に「内部処理形式LongのVariant型」を
渡した場合には動作するが、「Long型の変数」や「内部処理形式IntegerのVariant型」を
渡した時には動作しない物などが存在します。

ですから、Variant変数(メソッドの引数/戻り値なども含む)の型が、自動的に
変換されることを期待しているのであれば、それは無いと思います。
勝手に変更されると、API 呼び出しや、ActiveX との連携時に問題がありますし。

# 数式計算などにおいて、演算効率の観点から、たとえば 「lngA = 2 * 3」という式が
# 「lngA = 6&」のように最適化されるぐらいなら、ありえるかも知れませんけれども。

> だからこそキャスト?明示的な型変換?があると思ってました
たとえば CLng, CInt, CBool といった型変換関数の呼び出しは、内部的には、
下記の OLE API 群が呼び出されているはずです。
http://msdn2.microsoft.com/en-us/library/ms221508.aspx

また、バリアント型の演算であれば、
http://msdn2.microsoft.com/en-us/library/ms221430.aspx
などが呼ばれ、10進型や通貨型であれば、
http://msdn2.microsoft.com/en-us/library/ms221612.aspx
http://msdn2.microsoft.com/en-us/library/ms221515.aspx
などを使って演算が行われているものと思われます。


す〜  2007-10-13 09:53:22  No: 137772

>魔界の仮面弁士さん

ありがとうございます
リンク先は英語で細かい内容はわかりませんでしたが
仕組みはイメージできました

魔界の仮面弁士さんによる
日本語の解説がとても参考になりました


す〜  2007-10-23 00:19:36  No: 137773

解決とさせていただきます
ありがとうございました


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加