XPLINK / non-XPLINK compatibility

Compatibility with XPLINK only exists for Language Environment-conforming non-XPLINK applications which are able to run AMODE(31).

XPLINK Compatibility Support is defined as the ability for programs compiled NOXPLINK to transparently call programs that are compiled XPLINK, and vice versa. The programs can be non-XPLINK C or C++ (Fastlink), COBOL, PL/I or OS Linkage Assembler.

This transparent compatibility is provided at the Program Object boundary. It is also provided at the load module boundary, for compatibility with prelinker-built executables. That is, a Program Object (or load module) containing a caller of one linkage type (XPLINK or NOXPLINK) can call a function compiled with the opposite linkage type as long as the called function resides in a different Program Objector or load module. Program Objects can reside in either a PDSE or the HFS; load modules reside in PDSs.

Compatibility requires that the differences between stack structures, register conventions, and parameter lists are handled. Language Environment will automatically insert the glue code which performs the necessary transitions between XPLINK and non-XPLINK functions.

The main call linkage supporting XPLINK Compatibility is the DLL call mechanism, but C's fetch() and Language Environment’s CEEFETCH Assembler macro are also supported.

The following are not supported for XPLINK:
  • COBOL dynamic call of an XPLINK function
  • PL/I FETCH
  • CEELOAD