実行時メッセージ「JMP0015I-U」のシステムからのエラーコードに「0x45A」が通知されます。

実行時メッセージ「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です。

詳細はマイクロソフト社から公開されている、以下の情報を参照してください。
【確認方法】
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を作成してください。

製品・サービス情報
対象製品NetCOBOL
プラットフォームWindows x86, Windows x64, Windows Itanium
アンサー種別 運用/保守
このページの先頭へ