1) Соглашение о вызове "Си" для ptr2func.
## Код:
```
ptr2func* = PROCEDURE [call] ( x: REAL ): REAL;
PROCEDURE  Funcres* ["Funcres"] ( f: ptr2func; a: REAL ): REAL;
```
Можно сразу## Код:
```
PROCEDURE  Funcres* ["Funcres"] ( f: PROCEDURE [call] ( x: REAL ): REAL; a: REAL ): REAL;
```
## Код:
```
PROCEDURE [call] f(x: REAL): REAL;
  VAR 
BEGIN
  RETURN  x*x*x*x;
END f;
```

В ББ 1.5 приходится убирать [ccall] из процедурного типа:
## Код:
```
PROCEDURE  Funcres* ["Funcres"] ( f: PROCEDURE ( x: REAL ): REAL; a: REAL ): REAL;
```
## Код:
```
PROCEDURE [call] f(x: REAL): REAL;
...
```
Столкнулся с этим при портировании glut.h, можете поглядеть как сделано; см. в Зиновской коллекции OglGlut

2) Если я не ошибаюсь, то все экспортированные DLL-процедуры д. использовать соглашение о вызове stdcall. Вроде
## Код:
```
double __stdcall Funcres(ptr2func f, double a)...
```
У Вас этого нету и, мне кажется, что Вы забыли эту процедуру экспортировать. Оттуда и лезет "NIL procedure call". Просмотрите, что Ваша dll экспортирует; например есть плагин для тотал командерского просмотровщика.