相互作用するルーチンにとって、受け渡すデータの内容およびデータを受け渡す場所について同意することは、データを受け渡す 方法について同意するのと同じように重要です。 PL/I および C のいずれの場合も、データを、スタック上、汎用レジスター内、または浮動小数点レジスター内で受け渡すことが できます。
PL/I では、LINKAGE オプション (プロシージャー・ステートメントとエントリー宣言の OPTIONS オプションでの) によって、 データが受け渡される場所が決定します。 データ位置のエラーが発生する一般的な場合の 1 つに、ミスマッチのリンケージ・タイプを指定する (または、デフォルトが 正しくない場合にリンケージ・タイプを指定しない) 場合があります。
PL/I for Windows は、3 つの 32 ビット・リンケージ・タイプ (OPTLINK、 CDECL、および STDCALL) をサポートします。 次の PL/I 宣言は、関数 dosSleep が SYSTEM リンケージを使用することを指示します。
dcl dosSleep entry( fixed bin(31) byvalue )
returns( fixed bin(31) )
options( linkage(system) );
オプション・リストは、呼び出すすべての C ルーチンによって使用されるリンケージを指定する必要があります。 PL/I および VisualAge for C++ のいずれのコンパイラーも、OPTLINK をデフォルト・リンケージとして使用します。 Windows 上の多くの C ルーチンは STDCALL リンケージを使用します。これらのルーチンの場合、OPTIONS 属性で LINKAGE(STDCALL) を指定する必要があります。 例えば、DosSleep の Windows での同等の宣言は以下のようになります。
dcl Sleep ext('Sleep')
entry( fixed bin(31) byvalue )
returns( fixed bin(31) )
options( linkage(stdcall) );