Форум: "KOL";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
ВнизНе получается в 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 вся ветка
Форум: "KOL";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.014 c