VB6.0で作成されたツールがあり、これを
「完全コンパイル後に実行」をすると、
コンパイルエラー
プロシージャが大きすぎます
とエラーが出ます。
この状態のままexeを作成し、実行するとエラーは発生しません。
このコンパイルエラーは、ほっておくとどんな問題があるのでしょうか。
教えてください。
多分1つのプロシージャに長いコードを書いて
しまっているからこのエラーが出てしまうのでは
ないのでしょうか。
OKWeb(goo版) - 「コンパイルエラー:プロシージャが大きすぎます。」を回避するには。
http://oshiete.goo.ne.jp/qa/5737856.html
このページに書いてある通りプロシージャのコード量を
減らしてサブルーチン(Sub XXXXX())や関数(Function XXXXX())に
出来るものがあったら分離して記述すれば良いと思います。
みけさんも書かれていますが、一つのプロシージャ(Sub/Function等)に
含められるコードは、64KB が上限とされています。
また、変数や定数、ユーザー定義型なども、同様に 64KB の上限が
存在します。詳細はヘルプの下記の項を参照してみてください。
Visual Basic ドキュメント
└Visual Basic の使用方法
└プログラミング ガイド
└Visual Basic の仕様、制限事項、およびファイル形式
└プロジェクトの制限
├コントロールの制限
├データの制限
└システム リソースの制限
みけさん、魔界の仮面弁士さん
回答ありがとうございます。
直し方はわかりました。
ただ、exeにすると正常に動作しているように見えるので
「プロシージャが大きすぎます」とエラーが発生していても
exeにすれば問題がないのか、問題があるとすればなんなのか
知りたいと思っています。
ご存知であれば、教えていただけないでしょうか。
ネイティブコンパイルしていた場合、内容が最適化されることで、
サイズ上限を下回ったということなのかもしれません。
コンパイルモードが P-Code に設定されていた場合は、もしかしたら
開発環境で実行した場合と同様にコンパイルエラーになるかも? (未確認)
いずれにせよサイズ上限に近いコードというのは、可読性の点からも
今後のメンテナンスの上で問題となりうるでしょうから、たとえ今は
たまたま動いていたとしても、リファクタリングを実施すべきかと思います。
魔界の仮面弁士さん
返信遅くなって申し訳ありません。
また、回答ありがとうございます。
>コンパイルモードが P-Code に設定されていた場合は、もしかしたら
>開発環境で実行した場合と同様にコンパイルエラーになるかも? (未確認)
確かに、P-Codeに設定し、exeを作成しようとすると
コンパイルエラーになりました。
納得しました。
ありがとうございます。