実行時メッセージ「JMP0015I-U」のシステムからのエラーコードに「0x45A」が通知されます。
NetCOBOLのよくあるご質問を検索できます。
- 実行時メッセージ「JMP0015I-U」のシステムからのエラーコードに「0x45A」が通知されます。
- 現象が発生したシステムによって、対処方法が異なります。
現象が発生したシステムが、Windows NT 4.0、Windows 2000、Windows XPの場合
以下のFAQを参照してください。
現象が発生したシステムが、Windows Server 2003以降の場合
上記システムでは、TLS(スレッドローカルストレージ)の代わりにFLS(ファイバーローカルストレージ)という新たな資源が追加されました。FLSもTLSと同様に1プロセス内で確保できる最大数にOSの定量制限があります。FLSのエントリーを上限まで使いきると、さまざまな現象が発生します。
最も多い現象は、DLLがプロセス空間にロードされるタイミングにおいて、DLLの初期化に失敗してしまうというものです。
これは、プロセス内でFLSエントリーを上限まで使い切っている状態で、さらに、DLLの初期化処理でFLSエントリーの確保を行おうとして失敗した場合に発生します。特に1プロセスが多数のDLLで構成されていて、一つのDLLが一つのFLSエントリを消費する構造になっている場合、DLL数分のFLSエントリーが消費されるため簡単に定量制限を超えてしまいますので、注意が必要です。
各システムのFLSエントリー数の上限は128です。
詳細はマイクロソフト社から公開されている、以下の情報を参照してください。-
Visual C++ .NET 2003、Visual C++ 2005、または Visual C++ 2008でビルドされたアプリケーションに128個程度以上のDLLが含まれる場合、Windows Server 2003 以降のオペレーティングシステムでのロードに失敗することがある
(マイクロソフト社のページへリンク)
【確認方法】
DLLリンク時、Cランタイムライブラリ「LIBCMT.LIB」を指定しているか確認してください。
【対処方法】
「LIBCMT.LIB」を指定している場合は、以下のように対処してください。-
DLLがCOBOLだけで作成されている場合
リンク時、「LIBCMT.LIB」の指定をやめ、リンクオプション「/NOENTRY」を指定して、DLLを作成してください。 -
DLLがCOBOLとCで作成されている場合
-
同一のDLLにする場合
リンク時、「LIBCMT.LIB」の指定をやめ、「MSVCRT.LIB」を指定して、DLLを作成してください。 Cプログラムを翻訳オプション「/MT」で翻訳している場合、「/MD」を指定して再翻訳してください。 -
別々のDLLにする場合
COBOLのDLL作成時、「LIBCMT.LIB」を指定せず、リンクオプション「/NOENTRY」を指定してDLLを作成してください。
CのDLL作成時、翻訳オプション「/MD」を指定して翻訳し、DLLを作成してください。
-
-
製品・サービス情報 |
|
||||
---|---|---|---|---|---|
アンサー種別 | 運用/保守 |