Строка к TStream

Преобразуйте файл изображения в строку Base64 с помощью инструмента, подобного this , а затем замените заполнитель YourBase64StringHere в приведенном ниже фрагменте вашей строкой и поместите строку в раздел заголовка HTML:


Это будет работать на 100% в браузерах.

6
задан Greg Bishop 4 July 2009 в 16:50
поделиться

4 ответа

AStream объявлен как параметр OUT, что означает, что он не назначается в начале процедуры, и процедура отвечает за присвоение ему правильного значения .

Если я правильно интерпретирую ваш код, вам следует опустить OUT и убедиться, что AStream создается правильно при вызове подпрограммы.

Еще один код, показывающий вызов StringToStream, может дать еще несколько подсказок.

8
ответ дан 8 December 2019 в 04:09
поделиться

CopyFrom вызывает ReadBuffer, который вызывает Read, а Read объявляется абстрактным. Какой поток вы передаете в AStream? Если он не реализует Read, вы получите абстрактную ошибку. (И компилятор должен выдать вам предупреждение, когда вы создадите его экземпляр.)

6
ответ дан 8 December 2019 в 04:09
поделиться

Объявление AStream как out мне кажется неправильным. Попробуйте удалить выход.

Если это не поможет, вот функция, которую я использую:

procedure StringToStream(Stream: TStream;const S: String);
begin
Stream.Write(Pointer(S)^, length(S));
end;
4
ответ дан 8 December 2019 в 04:09
поделиться

Следующая процедура должна сделать именно то, что вы ищете. Обратите внимание, что использование AStream отвечает за освобождение экземпляра, созданного в этой процедуре. Совершенно нормально вернуть родительский класс (в данном случае tStream), а не конкретный потомок.

procedure StringToStream(const AString: string; out AStream: TStream);
begin
  AStream := TStringStream.Create(AString);
end;

Вы также можете закодировать это как функцию:

Function StringToStream(const AString: string): TStream;
begin
  Result := TStringStream.Create(AString);
end;
8
ответ дан 8 December 2019 в 04:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: