Почему работает Boolean, но не работает Files.Name?
Потому что у Boolean внутреннее представление простое до безобразия.
А вот у строки - сложное

При переводе из среды в среду надо ориентироваться на то, что "честно" передать указатели и объекты не получится - слишком уж рантаймы разные. Поэтому, максимум, что можно сделать - это передавать машинные адреса (в смысле тот же PChar), сведенными к 32-х битному целому. Особенно, если мы проецируем внутренности ББ вовне.

Поэтому процедура Foo, скорее всего, должна выглядеть так:

## Код:
```
PROCEDURE Foo* (IN path: INTEGER; name: INTEGER; OUT error: BOOLEAN);
```


и внутри нее из этого самого integer'а приведением получается адрес, указывающий на начало строки символов, которая используется в дальнейшем.
Вот как-то так...