Форум: "Основная";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];
Вниз
Копирование данных из TStream в буффер. Найти похожие ветки
← →
Ega23 © (2005-01-27 13:30) [0]Пишу dll. Поскольку, возможно, она будет использоваться не только из-под Делфи - не могу оперировать VCL-классами в экспортных функциях. А задача - передача "наверх" данных о сотруднике, в частности - его фотография.
Делаю так:
type
PPersInfo=^TPersInfo;
TPersInfo=packed record
.... //Тут не важно...
PersImgLength : Cardinal;
PersImgBuff : Pointer;
end;
procedure TKedrDBPersInfo.GetPersInfoTest(var PersInfo: PPersInfo);
var
jpg:TJpegImage;
fn:String;
ms:TMemoryStream;
begin
try
fn:=ExtractFilePath(Paramstr(0))+"FaceImg.jpg";
jpg:=TJpegImage.Create;
ms:=TMemoryStream.Create;
try
jpg.LoadFromFile(fn);
jpg.SaveToStream(ms);
PersInfo^.PersImgLength:=ms.Size;
GetMem(PersInfo^.PersImgBuff, PersInfo^.PersImgLength);
ms.Position:=0;
ms.ReadBuffer(PersInfo^.PersImgBuff, PersInfo^.PersImgLength);
finally
ms.Free;
jpg.Free;
end;
AV вылетает на ms.Free;
Причём, после ms.ReadBuffer - в отладчике навожу на ms.Size - вижу AccessViolation...
Чего не так делаю?
← →
MBo © (2005-01-27 13:41) [1]ms.ReadBuffer(PersInfo^.PersImgBuff^
← →
Ega23 © (2005-01-27 13:42) [2]Тьфу-ты. Блин. Спасибо!
← →
icWasya © (2005-01-27 14:52) [3]и помнить о Sharemem!!!
← →
Erik1 © (2005-01-27 15:31) [4]Хотя бы fn:=ExtractFilePath(Paramstr(0))+"FaceImg.jpg"; вынеси за Try. А ShareMem кажется тут непонадобится.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.04 c