В Delphi XE я беру данные CF_UNICODETEXT из буфера обмена. Результатом является поток, который заканчивается двумя нулевыми байтами. Чтобы получить фактическую строку, скопированную в буфер обмена, мне нужно удалить нули.Преобразование потока памяти с нулевым завершением в строку unicode
This similar so question содержит хороший способ преобразования из TMemoryStream в юникод строки в Delphi:
function MemoryStreamToString(M: TMemoryStream): string;
begin
SetString(Result, M.Memory, M.Size div SizeOf(Char));
end;
В моем случае, однако, это будет производить строку в том числе задней нулям. Я мог бы исправить это, ограничив размер:
... но это кажется уродливым, «особый случай». Интересно, есть ли более чистый способ закодировать это, чтобы кто-нибудь (я!), Смотрящий на код позже, не сразу спросил: «Почему трейлинг-символ выпадает из потока?»
Редактировать: Один из способов упредить вопрос - это добавить комментарий. Но, кроме этого?
Забавно, что вы упоминаете TMemoryStream. Сегодня я удалил его из всей своей кодовой базы (там осталось много ссылок) из-за реализации фрагментации памяти! –
функция плитка ... –
@David: это интригующий. Какая ваша предпочтительная замена? –