Организация работы с буфером

Рейтинг: 1Ответов: 1Опубликовано: 09.06.2011

Ситуация такая. Есть буфер, - допустим, такой

myVar: array[1..40000] of char;

и есть процедура

procedure myProc(var Arr: array of char; var BytesRecieved);

Задача - чтоб после выполнения процедуры буфер был заполнен. Проблема: процедура вызывается из библиотеки(нет возможности ковырять) и записывает от 38000 до 42000 байт. Буфер тоже изменять нельзя.

Пока вижу решение в дополнительном буфере на 43k of char, запускать процедуру на него и далее перекидывать излишки в начало и потом записывать в @myAdditionalBuffer[BytesOverflow]. НО: блин, мне не нравится введение переменной в 43кб =(

Может, у кого есть более оптимальная идея?

[код на делфи для удобства, мне абстрактное описание действий нужно]

UPD [решено] в FormCreate в поток забивается 40000 нулей, каждые 5 сек чистится+остаток пишется в начало. Решение не идеальное, но, может, кому пригодится) По крайней мере, оно работает и глюков не наблюдаю.

type MyStream = class
  Stream: TMemoryStream;
  LastReadPos: integer;
  end;
var MStr: MyStream;
    Buf: array[1..40000] of char;
    AddBuf: array[1..42000] of char;
[...]
myProc(AddBuf, BytesRead);
MStr.Stream.Position :=  MStr.Stream.Size;
MStr.Stream.WriteBuffer(AddBuf[0], BytesRead);
MStr.Stream.Position := MStr.LastReadPos;
MStr.Stream.ReadBuffer(Buf, 40000);
inc(MStr.LastReadPos, 40000);
[...]

Ответы

Ответов пока нет.