Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
3-1129111830
iamkate
2005-10-12 14:10
2005.11.27
Проблема с Update blob-поля


2-1131102812
dj0n
2005-11-04 14:13
2005.11.27
влияет ли ОС на прогу??


2-1131541735
DelphiLexx
2005-11-09 16:08
2005.11.27
TFIBQuery


2-1131304867
Toxa_ua
2005-11-06 22:21
2005.11.27
Как посимвольно прочитать файл?


3-1129306926
suharew
2005-10-14 20:22
2005.11.27
Trim в IBX





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский