月別アーカイブ: 2016年8月

4Dスタックサイズが足りない

JCL_dlgという自社製のダイアログを表示するコンポーネントを使っていました。たとえば「削除してよろしいですか?」などと表示するためのダイアログを標準化しているのです。このコンポーネントを呼び出しているときに、問題が起こりました。

4D v15.2 Windows版で、次のようなメッセージが表示されました。
Mac版、winのビルド版では発生しません。ダイアログのボタン名をセットしているコードが無視されていました。

Not enough stack space to complete the current method.

サポートに問い合わせたところ、下記のような回答が得られたため、
親プロジェクトのアプリで、New Processに与えたパラメータを確認したところ、第2引数に128KBを与えていました。
$main_proc:=New process(“A00_main”;128*1024;”A00_main”;*)

次のように変更したら問題は発生しなくなりました。
$main_proc:=New process(“A00_main”;1024*1024;”A00_main”;*)

サポートありがとうございました。

後日談
次のようにスタックサイズにゼロを与えると、デフォルト値をセットしてくれるようです。
$main_proc:=New process(“A00_main”;0;”A00_main”;*)

v15の場合、512*1024になります。

────────────── 回 答 ─────────────────

Not enough stack space to complete the current method メッセージが表示される理由は

1)New processコマンドの第2パラメーターが小さい
2)Execute on serverコマンドの第2パラメーターが小さい
3)プラグインが古い

などが考えられます。インタープリターとコンパイルおよびビルド版で状況が違う理由として考えられるのは、パラメータ並びにローカル変数の変数定義(型宣言)がされていないことが考えられます。

項目1と2についてですが、第2パラメータの推奨値は、下記のように変化しています。

4D v11:64KB
4D v12:128KB
4D v13以降:512KB

これは今のところドキュメント化されていない仕様ですが、4D v13以降は前述コマンドの第2パラメータに0を渡すと、そのバージョンの推奨値を少し上回る値がセットされます。

上記につきまして、当該データベースをご確認くださいますようお願い申し上げます。

────────────────────────────────────