Значит ситуация такая: Изучаю работу ББ с Виндой. Нужно вызывать ДЛЛки написанные в Си. Делфи и т.д.
Пока моделирую ситуацию, чтоб понять как и чего.

Допустим есть ДЛЛ
## Код:
```
library Project1;

uses    sharemem,
  SysUtils,
  windows,
  Classes;

{$R *.res}
 {$o-}
 procedure ir(var buffer:pchar);
 var s:string;
 begin
  buffer:='1234';
 end;

 exports ir;
begin
end.
```


Местные подсказали описать модуль импорта, что я и сделал
## Код:
```
MODULE Dll["c:\temp\Project1.dll"];
IMPORT SYSTEM,WinApi;

TYPE   
   PROCEDURE GetBuffer* ["ir"] (VAR lpszAgent:WinApi.PtrSTR);
END Dll.
```

Тут все нормально.

Теперь юзаю  функу ДЛЛки:
## Код:
```
MODULE m;
IMPORT Dll,WinApi,StdLog,ComTools;

PROCEDURE a*;
VAR s:WinApi.PtrSTR;i:INTEGER;
    c:SHORTCHAR;
BEGIN
 StdLog.Clear; 
 s:=ComTools.NewEmptySString(6);
 Dll.GetBuffer(s);
 i:=WinApi.GetLastError();
 IF i#0 THEN 
     StdLog.String('Ошибка № ');StdLog.Int(i);StdLog.Ln;
 ELSE
  StdLog.Int(LEN(s$));StdLog.Ln;
  FOR i:=0 TO LEN(s$)-1 DO 
   c:=s[i];
   StdLog.Char(c);
  END;
 END;
 ComTools.FreeSString(s);
END a;

END m.
```


Тут тоже норм, спасибо Петру.

Вопрос только в том верно ли я освобождаю память через ComTools.FreeSString(s); ибо на ней выпадает ошибка
> -- Цитата:
> illegal memory read
Хотя читается строка из буфера, скормленного ДЛЛке нормально

Некоторые функции примерно такой спецификации
## Код:
```
BOOL ReadFile(
  __in   HANDLE hFile,
  __out  LPVOID lpBuffer,
  __in   DWORD dwNumberOfBytesToRead,
  __out  LPDWORD lpdwNumberOfBytesRead
);
```

Которые мне придется юзать (Это из самописной ДЛЛ) выдают ошибку
> -- Цитата:
> ERROR_INVALID_PARAMETER87 (0x57)

Поэтому я и хочу научиться на примерах, пока на своих, а потом дальше в лес.

Описываю я ее в модуле так:
## Код:
```
PROCEDURE Read* ["ReadFile"](
     hFile:WinApi.PtrVoid;OUT lpBuffer:WinApi.PtrSTR;dwNumberOfBytesToRead:LONGINT;OUT lpdwNumberOfBytesRead:LONGINT
   ):BOOLEAN;
```

И вызываю примерно так как показал в своем примере, передавая туда переменку s:WinApi.PtrSTR, для которой была зарезервирована память через ComTools.NewEmptySString
Вот мне и интересно что это может быть. Где я напортачил...