I've found the answer from another forum.

[pascal]PROGRAM example;
TYPE
TLIST_ITEMptr = ^TLIST_ITEM;
TLIST_ITEM = RECORD
Field: INTEGER;
Other: INTEGER;
END;

TLISTptr = ^TLIST;
TLIST = ARRAY [0..0] OF TLIST_ITEM;

FUNCTION get_list: TLISTptr; CDECL; EXTERNAL 'lib.dll';

VAR
TheList: TLISTptr;
BEGIN
{ Somewhere }
TheList := get_list;
WriteLn (TheList^[0]);
END.[/pascal]Note the use of [ 0..0 ] to prevent 'unfair use'.

It was sooooooo obvious... I'm embarassed... ops: