Короче оказалось что работа с массивами в Делфях и Шапре отличаются маленько, для делфей решение оказалось таким:
Описание
Код:
function someFunc(A0, A1, A2, B: Pointer; Len: Integer): Integer; cdecl; external 'someDLL.dll';
Работа
Код:
var
r: Integer;
a1, a2: array[0..0] of Integer;
aB: Pointer;
len: Integer;
rec: SomeRecord;
begin
r := 0;
len := 65535;
aB := nil;
aB:= AllocMem(len);
//a0 - глобальная переменная, с ней проблем нет,
//иначе библиотека выкинет исключение
r := someFunc(a0, @a1[0], @a2[0], aB, len);
if(r > 0)then
case a2[0] of
SOME_CONST: begin
CopyMemory(@rec, aB, SizeOf(rec));
Если коротко и словами, то все уперлось в то что к массивам нужно обращаться через указатель.