プロシージャが大きすぎます

解決


もも  2011-09-20 13:12:33  No: 103045  IP: [192.*.*.*]

VB6.0で作成されたツールがあり、これを
「完全コンパイル後に実行」をすると、

コンパイルエラー
プロシージャが大きすぎます

とエラーが出ます。
この状態のままexeを作成し、実行するとエラーは発生しません。
このコンパイルエラーは、ほっておくとどんな問題があるのでしょうか。
教えてください。

編集 削除
みけ  2011-09-20 17:43:37  No: 103046  IP: [192.*.*.*]

多分1つのプロシージャに長いコードを書いて
しまっているからこのエラーが出てしまうのでは
ないのでしょうか。

OKWeb(goo版) - 「コンパイルエラー:プロシージャが大きすぎます。」を回避するには。
http://oshiete.goo.ne.jp/qa/5737856.html

このページに書いてある通りプロシージャのコード量を
減らしてサブルーチン(Sub XXXXX())や関数(Function XXXXX())に
出来るものがあったら分離して記述すれば良いと思います。

編集 削除
魔界の仮面弁士  2011-09-20 20:18:34  No: 103047  IP: [192.*.*.*]

みけさんも書かれていますが、一つのプロシージャ(Sub/Function等)に
含められるコードは、64KB が上限とされています。

また、変数や定数、ユーザー定義型なども、同様に 64KB の上限が
存在します。詳細はヘルプの下記の項を参照してみてください。


Visual Basic ドキュメント
└Visual Basic の使用方法
  └プログラミング ガイド
    └Visual Basic の仕様、制限事項、およびファイル形式
      └プロジェクトの制限
        ├コントロールの制限
        ├データの制限
        └システム リソースの制限

編集 削除
もも  2011-09-22 09:07:23  No: 103048  IP: [192.*.*.*]

みけさん、魔界の仮面弁士さん
回答ありがとうございます。

直し方はわかりました。
ただ、exeにすると正常に動作しているように見えるので
「プロシージャが大きすぎます」とエラーが発生していても
exeにすれば問題がないのか、問題があるとすればなんなのか
知りたいと思っています。

ご存知であれば、教えていただけないでしょうか。

編集 削除
魔界の仮面弁士  2011-09-22 12:28:49  No: 103049  IP: [192.*.*.*]

ネイティブコンパイルしていた場合、内容が最適化されることで、
サイズ上限を下回ったということなのかもしれません。
コンパイルモードが P-Code に設定されていた場合は、もしかしたら
開発環境で実行した場合と同様にコンパイルエラーになるかも? (未確認)


いずれにせよサイズ上限に近いコードというのは、可読性の点からも
今後のメンテナンスの上で問題となりうるでしょうから、たとえ今は
たまたま動いていたとしても、リファクタリングを実施すべきかと思います。

編集 削除
もも  2011-09-28 10:46:00  No: 103050  IP: [192.*.*.*]

魔界の仮面弁士さん
返信遅くなって申し訳ありません。
また、回答ありがとうございます。

>コンパイルモードが P-Code に設定されていた場合は、もしかしたら
>開発環境で実行した場合と同様にコンパイルエラーになるかも? (未確認)

確かに、P-Codeに設定し、exeを作成しようとすると
コンパイルエラーになりました。

納得しました。
ありがとうございます。

編集 削除