Хм... Так, ладно. Еще такой вариант
## Код:
```
MODULE Dll["c:\temp\Project1.dll"];
IMPORT SYSTEM,WinApi;

TYPE   
   PROCEDURE GetBuffer* ["ir"] (buf:POINTER TO ARRAY OF SHORTCHAR);
END Dll.
```

И вызов:
## Код:
```
MODULE m;
IMPORT SYSTEM,Dll,WinApi,StdLog;

PROCEDURE a*;
VAR i:INTEGER;
    buf:POINTER TO ARRAY OF SHORTCHAR;
BEGIN
 StdLog.Clear; 
 NEW(buf,10);
 Dll.GetBuffer2(buf);
 i:=WinApi.GetLastError();
 IF i#0 THEN 
     StdLog.String('Error ');StdLog.Int(i);StdLog.Ln;
 ELSE
  StdLog.String('String is = ');
  StdLog.String(buf$);
 END;
END a;

END m.
```


Выдает пустую строку, да еще и ББ потом закрывается сам собой.

Что в этом случае не так? Вроде как я передаю адрес, по которому зарезервирована память