メインルーチンが PL/I でコード化されている場合、2 種類の非 PL/I ルーチンを呼び出すことができます。
システム・ルーチンは、独自のランタイム環境は必要としません。また、それらは PL/I 実行可能 (.EXE) ファイルまたはダイナミック・リンク・ライブラリー (.DLL) に直接リンクすることができます。 IBM VisualAge C/C++ ルーチンを除いて、その他のすべての非 PL/I ルーチンは、.EXE または .DLL に直接リンクすることはできません。 その代わり、それらは、.DLL がロードされたときに、それらに必要なすべてのランタイム環境の初期化を行えるように、.DLL にリンクする必要があります。
IBM VisualAge C/C++ ルーチンは、PL/I とリンクできます。ただし、C ルーチンが PL/I とリンクされており、それらのいずれかが C ライブラリー関数を 使用する (または C ライブラリー関数自身である) 場合は、ルーチンを呼び出す前に C ランタイム を初期化する必要があります。C ランタイムは、次のルーチンを呼び出すことで初期化できます。
dcl _CRT_init ext('_CRT_init')
entry()
returns( optional fixed bin(31) )
options( linkage(optlink) );
また、C ランタイムが、オープンしたすべてのファイルをクローズし、獲得した可能性のあるその他すべてのシステム・リソースを戻すようにするには、以下を呼び出すことにより、C ランタイムを終了する必要があります。
dcl _CRT_term ext('_CRT_term')
entry()
returns( optional fixed bin(31) )
options( linkage(optlink) );