Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > TMemoryStream и DLL


Автор: MikeLevinN 11.2.2008, 22:38
Мне нужно из приложения передать TMemoryStream в DLL, там его обработать и вернуть другой TMemoryStream (размер входящего не равен размеру результата).


Как поступить? Использовать sharemem не хочу по причине ещё одной дополнительной библиотеки. Я думаю передавать как-то через PChar буфер, но вот как на деле поступить - не представляю.

Что посоветуете?


Спасибо.

Автор: VICTAR 11.2.2008, 23:04
Цитата(MikeLevinN @  11.2.2008,  22:38 Найти цитируемый пост)
Что посоветуете?

Bpl не подойдет?

Автор: Alexeis 12.2.2008, 02:16
Цитата(MikeLevinN @  11.2.2008,  21:38 Найти цитируемый пост)
спользовать sharemem не хочу по причине ещё одной дополнительной библиотеки.

  Есть же FastShareMem не требующий Dll. 

  Кроме того есть VirtualAlloc, который прекрасно справляется с выделением памяти и не требует менеджера кучи. На счет самого класса, то не советую. Лучше, вообще в Dll передать IStream полученный через TStreamAdapter, тогда не будет дублироваться VCL код и не нужно будет передавать классы и менеджер памяти будет использоваться родной (из программы)

Автор: lukas 14.2.2008, 20:57
Код

procedure String2Stream(a: String; b: TMemoryStream);
begin
b.Position := 0;
b.WriteBuffer(Pointer(a)^,Length(a));
b.Position := 0;
end;


procedure Stream2String(b: TStream; var a: String);
begin
b.Position := 0;
SetLength(a,b.Size);
b.ReadBuffer(Pointer(a)^,b.Size);
b.Position := 0;
end;




Использовать эти функции...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)