Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.27;
Скачать: CL | DM;

Вниз

Не получается в DLL, собранную на VCL, передать PStream.   Найти похожие ветки 

 
DmiSb   (2005-04-01 07:59) [0]

Уважаемые мастера, очень нужна помошь.


 
thaddy   (2005-04-01 09:00) [1]

You can use the stream.memory and stream.size properties to create either a VCL memorystream on a KOL stream, or a KOL memorystream on a VCL stream. But you can also simply read/write with Both. Have you tried yet? It is easy.


 
ECM ©   (2005-04-01 13:35) [2]

Закинь мне на мыло этот проект...
И про FastReport можно.


 
DmiSb   (2005-04-01 14:38) [3]

2 ЕСМ
Закинул еще в 10:30 сегодня. Неужто опять не дошло


 
DmiSb   (2005-04-04 14:52) [4]

А теперь подробнее (может кто подскажет где я не прав):

В программе на КОЛ:

procedure myLoadFromStream(Mem: Pointer; Siz: integer);stdcall;
external "myDLL.dll";

var Stream: PStream;
begin
 Stream:=NewReadFileStream("1.txt");
 myLoadFromStream(Stream.Memory, Stream.Size);
 ......
 Stream.Free;
end;

В DLL написанной на VCL:

procedure myLoadFromStream(Mem: Pointer; Siz: integer);stdcall;
var MStream: TMemoryStream;
begin
 MStream:=TMemoryStream.Create;
 MStream.SetSize(Siz);
 Move(Mem^, MStream.Memory^, Siz);  //Здесь где-то ошибка
 ......
 MStream.Free;
end;

Причем, если все на VCL, то работает.

Очень нужно. Облазил весь инет, но увы......


 
ECM ©   (2005-04-04 18:19) [5]

var Stream: PStream;
begin
 Stream:=NewReadFileStream("1.txt");
 myLoadFromStream(Stream.Memory, Stream.Size);

Stream.Memory = nil - ...
надо сначала прочитать куда-нибудь данные из файла:
var
 Mem: Pointer;
 Sz: Integer;
begin
 Stream:=NewReadFileStream("1.txt");
 Sz := Stream.Size;
 GetMem(Mem,Sz);
 Stream.Read(Mem^,Sz);
 myLoadFromStream(Mem, Sz);


 
DmiSb   (2005-04-05 06:19) [6]

2 ЕСМ
Спасибо, действительно работает так.
Интересно, а почему в VCL такие выкрутасы не нужны. Прекрасно справляется код:

var Stream: TMemoryStream;
begin
 Stream:=TMemoryStream.Create;
 Stream.LoadFromFile("1.txt");
 myLoadFromStream(Stream.Memory, Stream.Size);
 Stream.Free;

Кстати, ты письмо с первым вариантом Фаста получил или нет ?


 
DmiSb   (2005-04-05 06:20) [7]

2 ЕСМ
Спасибо, действительно работает так.
Интересно, а почему в VCL такие выкрутасы не нужны. Прекрасно справляется код:

var Stream: TMemoryStream;
begin
 Stream:=TMemoryStream.Create;
 Stream.LoadFromFile("1.txt");
 myLoadFromStream(Stream.Memory, Stream.Size);
 Stream.Free;

Кстати, ты письмо с первым вариантом Фаста получил или нет ?


 
ECM ©   (2005-04-05 06:44) [8]

В КОЛ нет эквивалента Stream.LoadFromFile("1.txt");
надо делать иначе. Почитай
http://delphimaster.net/view/11-1104391392/
...
Письмо получил... времени углубленно посмотреть пока нехватает.


 
DmiSb   (2005-04-05 07:14) [9]

Ну тады понятно.
Я пока второй вариант поковыряю, потом соображения намылю.


 
DmiSb   (2005-04-05 13:46) [10]

Еще одна интересная проблемка возникла:

Заполняю PStrList и сохраняю в PStream

Stream:=NewMemoryStream;
StrList.SaveToStream(Stream);
Sz := Stream.Size;
GetMem(Mem,Sz);
Stream.Read(Mem^,Sz);
myLoadData(Mem, Sz);  //процедура в ДЛЛ

В ДЛЛ делаю обратную штуку

procedure myLoadData(Mem: Pointer; Siz: integer);stdcall;
var MStream: TMemoryStream;
 DataList: TStringList;
begin
 MStream:=TMemoryStream.Create;
 MStream.SetSize(Siz);
 Move(Mem^, MStream.Memory^, Siz);
 DataList:=TStringList.Create;
 DataList.LoadFromStream(MStream);
 MStream.Free;

Так вот в результирующем DataList вместо строк крокозяблы какие-то. Что ж  такое-то. Ну никак KOL c VCL дружить не хотят.
Что я опять не так делаю ?


 
ECM ©   (2005-04-05 13:55) [11]

Stream:=NewMemoryStream;
StrList.SaveToStream(Stream); // Данные из StrList в Stream.Memory
Sz := Stream.Size;
GetMem(Mem,Sz); // Mem - новый блок памяти (мусор)
Stream.Read(Mem^,Sz); // Из Mem (Мусор) в Stream.Memory
myLoadData(Mem, Sz);  // Мусор в Длл


Ты наверное плохо понимаешь потоки - посмотри в KOL.pas
попробуй так:

Stream:=NewMemoryStream;
StrList.SaveToStream(Stream);
myLoadData(Stream.Memory, Stream.Size);


 
DmiSb   (2005-04-05 14:03) [12]

2 ECM
Да уж. Круто. Что-то я совсем с этими потоками запарился. Видно я их не то чтобы плохо, я их совсе не понимаю. В VCL проще было.
Спасибо.



Страницы: 1 вся ветка

Текущий архив: 2005.11.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
14-1131377576
ZLOFENIX
2005-11-07 18:32
2005.11.27
The Вопрос


14-1131421825
Бугага
2005-11-08 06:50
2005.11.27
Печать с заданными полями


14-1130982517
-[ HAWK ]-
2005-11-03 04:48
2005.11.27
Прикрепление скинов


2-1131514568
Fedpavel
2005-11-09 08:36
2005.11.27
Работа с ADOQery


2-1131449356
nadirpp
2005-11-08 14:29
2005.11.27
Покраска СТРОКИ в DBGrid