複数の別個にバインドされたモジュールとして構築されるアプリケーション (つまり、言語環境プログラム・エンクレーブ) の場合は、モジュール相互間で 1 つのリンケージ形式 (つまり、動的呼び出しリンケージまたは DLL リンケージのいずれか) のみを使用しなければなりません。
DLL リンケージ とは、DLL および NODYNAM オプションを使用してコンパイルされたプログラム内の呼び出しを指します (呼び出しは、別個のモジュール内のエクスポートされた名前に解決されます)。DLL リンケージが、別個のモジュール内に定義されているメソッドの呼び出しを指すこともあります。
しかし、アプリケーションによってはもっと多くの柔軟性が必要になります。そのような場合は、プログラムが次のようにコンパイルされていれば、言語環境プログラム・エンクレーブ内で DLL リンケージと COBOL 動的呼び出しリンケージの両方を使用することができます。
| プログラム A | プログラム B | コンパイル・オプション |
|---|---|---|
| 動的呼び出しを含む | 動的呼び出しのターゲット | NODLL |
| DLL リンケージを使用する | ターゲット・プログラムまたはメソッドを含む | DLL |
プログラムに、別個にコンパイルされたプログラムに対する CALL ステートメントが含まれている場合、一方のプログラムを DLL コンパイラー・オプションでコンパイルし、他方を NODLL でコンパイルすると、呼び出しがサポートされるのは、2 つのプログラムを一緒に同じモジュールでバインドした場合だけです。
次の図では、別個にバインドされたモジュールをいくつか示します。これらのモジュールには、動的呼び出しと DLL リンケージが混在しています。
DLL アプリケーションのコンポーネントはすべて同じ AMODE でなければなりません。COBOL 動的呼び出しによって通常提供される自動 AMODE 切り替えは、DLL リンケージでは利用できません。
DLL リンケージを使用して呼び出されるプログラムを取り消すことはできません。