Сабж, собственно Пробовал SetString(MyStr,PChar(ms.memory),ms.Size), но строка длиннее 4096 байт не получалась, если делать .Read или .ReadBuffer - и шанс, что искомую подстроку разобьет на несколько и она не найдется всегда есть. P.S. Раньше отписывал в файл и искал там, но теперь решил перейти к многопоточности, и такой вариант уже не подходит )) Подскажите, pls, как будет правильнее?
На сколько я помню.. самый простой вариант - это создать в потоке TStringList и в него загрузить этот MemoryStream.. и искать уже в StringList'e.. PS: ТОПОРНЫЙ метод. подойдёт только новичкам!)) PPS: сори нет Delphi под рукой, не могу на память помочь..\\
получаешь адрес памяти где расположены данные и тупо юзаешь это как pchar и в ней ишеш, главное не забывать про конец строки
Вот, ток что накалякал : Code: function FindStringFromMem(AText : String; AMemory : Pointer; ASize : Cardinal) : Pointer; Var _cp : Cardinal; _tp : Cardinal; Begin Result := nil; if (Length(AText) = 0) or (ASize = 0) then Exit; _tp := 1; _cp := Cardinal(AMemory); while (_cp < Cardinal(AMemory) + ASize) do Begin if AText[_tp] = PChar(Pointer(_cp))^ then if _tp = Length(AText) then Begin Result := Pointer(_cp - Length(AText) + 1); Exit; end else Inc(_tp); Inc(_cp); end; end; Использовать p := FindStringFromMem('Эц', MemoryStream.Memory, MemoryStream.Size);