Форум: "Начинающим";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];
ВнизTMemoryStream Найти похожие ветки
← →
авыф (2007-12-18 18:51) [0]вызываю процедуру, делаю там что-то, возвращаю результат:
var
frStream, fs : TMemoryStream;
buf: string;
outBuff: PChar;
outLen: DWORD;
Begin
outLen := 123;
GetMem(outBuff, 5000000);
frStream := TMemoryStream.Create;
frStream.LoadFromFile(frOld);
frStream.Seek(0, soFromBeginning);
BuildFRT(Application.Handle, frStream.Memory, frStream.Size, outBuff, 5000000, @outLen);
fs := TMemoryStream.Create;
fs.SetSize(outLen);
// fs.Read(outBuff, outLen);
fs.ReadBuffer(outBuff, outLen);
fs.SaveToFile("c:\t4.fr3");
rep.LoadFromStream(fs);
frStream.Free;
FreeMEm(outBuff);
rep.ShowReport();
вываливает AV на чтение в стрим. Что не так я делаю?
← →
Palladin © (2007-12-18 18:52) [1]ну вот собака и порылась в "делаю там что то"
← →
Palladin © (2007-12-18 18:53) [2]хотя может и не там, бо
fs.ReadBuffer(outBuff, outLen);
должен выглядеть как
fs.ReadBuffer(outBuff^, outLen);
← →
авыф (2007-12-18 18:55) [3]
> Palladin © (18.12.07 18:53) [2]
спасибо
кто этот значок придумал? убил бы!
← →
Palladin © (2007-12-18 19:01) [4]остынь, горячий финский парень, нужно осозновать разницу между переменной и указателем на данные, коим и является PChar
← →
авыф (2007-12-19 09:45) [5]
> Palladin © (18.12.07 19:01) [4]
а string - не указатель?
← →
Palladin © (2007-12-19 09:53) [6]String - это Compiler Magic
фактически указатель, но работать можно и как c обычной переменной, например в твоем случае можно и его использовать вместо PChar, выглядеть будет как:var
frStream, fs : TMemoryStream;
buf: string;
outBuff: String;
outLen: DWORD;
Begin
outLen := 123;
SetLength(outBuff, 5000000);
frStream := TMemoryStream.Create;
frStream.LoadFromFile(frOld);
frStream.Seek(0, soFromBeginning);
BuildFRT(Application.Handle, frStream.Memory, frStream.Size, @outBuff[1], 5000000, @outLen);
fs := TMemoryStream.Create;
fs.SetSize(outLen);
fs.ReadBuffer(outBuff[1], outLen);
fs.SaveToFile("c:\t4.fr3");
rep.LoadFromStream(fs);
frStream.Free;
// FreeMEm(outBuff); - и это уже не нужно
rep.ShowReport();
← →
Palladin © (2007-12-19 09:58) [7]странно, форум сглючил...
← →
авыф (2007-12-19 10:03) [8]
> Palladin © (19.12.07 09:53) [6]
Не, в моем случае string не получится - эт я так, для отладки состряпал кусочек, а в реале вся эта байда в длл-ке (моя дельфа не хочет, сволочь, их отлаживать) и на ShareMem вето.
← →
авыф (2007-12-19 10:05) [9]
> Palladin © (19.12.07 09:53) [6]
вот именно это я и имел в виду в [3] - что компилятору "трудно догадаться", что это за тип?
← →
Palladin © (2007-12-19 10:07) [10]компилятору трудно! откуда он может знать твои желания? ты ему тупо сказал записать все данные начиная с адреса переменной outBuf размером outLen, именно адреса самой переменной, а не адреса на который эта переменная указывает, ты тупо сказал - он тупо и сделал!
← →
авыф (2007-12-19 10:11) [11]
> Palladin © (19.12.07 10:07) [10]
а как тогда со стрингом?
← →
Palladin © (2007-12-19 10:13) [12]ну ты же видишь как я со стрингом работаю, указываю адрес (значек @) первого символа строки
← →
авыф (2007-12-19 10:18) [13]
> Palladin © (19.12.07 10:13) [12]
да, точно
спс
← →
авыф (2007-12-19 10:26) [14]блин, засада.
как мне в вызываемой процедуре PChar"у присвоить значение типа string?
var_PChar := PChar(var_srt) - в процедуре видит нормально, а возвращать ничего не хочет
← →
Palladin © (2007-12-19 10:34) [15]var в параметрах укажи
← →
авыф (2007-12-19 10:36) [16]во, блин, а какая разница-то указателю var или не var?
← →
Palladin © (2007-12-19 10:41) [17]большая, мля! указатель это он для тебя указатель, а для компилятора обычная перменная, указывая Var в параметрах, ты говоришь компилятору, что бы он в стек заносил не сам значение переменной, а ссылку на нее, соответственно меняя значение параметра, ты меняешь лишь значение которое находится в стеке и никак не отражается на занчении самой переменной, а если ты переменную передал по ссылке (var), то меняя значение параметра ты меняешь значение и самой переданной переменной, а указатель она или нет - абсолютно монопенисуально
← →
Сергей М. © (2007-12-19 10:45) [18]
> авыф (19.12.07 10:26) [14]
Возврат именно pchar-типа данных чем обоснован ?
Обычная ф-ция, возвращающая string-тип чем-то не устраивает ?
← →
авыф (2007-12-19 10:48) [19]
> Palladin © (19.12.07 10:41) [17]
спасибо, буду знать.
и еще, тады:
fs.ReadBuffer(outBuff, outLen) - не хочет, зараза, ничего записывать!
смотрю в файле, а там:
...
рє
рє
рє
...
здесь-то что не так?
← →
авыф (2007-12-19 10:49) [20]
> Сергей М. © (19.12.07 10:45) [18]
да это все в длл-ке, эт, так, для примера, на sharemem мораторий
← →
Palladin © (2007-12-19 10:50) [21]
> спасибо, буду знать.
а почитал бы любую книженцию по паскалю уже знал бы давно
> здесь-то что не так?
1 ну а outBuff у тебя какого типа?
2 где тут запись? тут чтение только
← →
авыф (2007-12-19 10:58) [22]
> а почитал бы любую книженцию по паскалю уже знал бы давно
я думал, что раз он указатель, то этого достаточно, а вообще про передачу по ссылке я знал.
outBuff у меня PChar
запись чего? файла? просто не написал fs.SaveToFile("c:\t4.fr3");
← →
Плохиш © (2007-12-19 11:14) [23]
> авыф (19.12.07 10:58) [22]
Запись в поток fs.
← →
авыф (2007-12-19 11:24) [24]сорри, попутал
всем спасибо
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.01.20;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.043 c