如果您以 CF_UNICODETEXT 为目标,则需要专门指定unicode字符串:
// For old Delphi versions
{$IFNDEF UNICODE}
type
UnicodeString = WideString;
{$ENDIF}
// For CF_TEXT
function MemoryStreamToAnsiString(M: TMemoryStream): AnsiString;
begin
SetString(Result, M.Memory, M.Size);
if (Result <> '') and (Result[Length(Result)] = #0) then
SetLength(Result, Length(Result) - 1);
end;
// For CF_UNICODETEXT
function MemoryStreamToUnicodeString(M: TMemoryStream): UnicodeString;
begin
SetString(Result, M.Memory, M.Size div SizeOf(WideChar));
if (Result <> '') and (Result[Length(Result)] = #0) then
SetLength(Result, Length(Result) - 1);
end;
// I'm not sure that you should use this form
function MemoryStreamToString(M: TMemoryStream): String;
begin
SetString(Result, M.Memory, M.Size div SizeOf(Char));
if (Result <> '') and (Result[Length(Result)] = #0) then
SetLength(Result, Length(Result) - 1);
end;
如果您 100% 确定该字符串是以零结尾的,那么:
// For CF_TEXT
function MemoryStreamToAnsiString(M: TMemoryStream): AnsiString;
begin
SetString(Result, M.Memory, M.Size - 1);
end;
// For CF_UNICODETEXT
function MemoryStreamToUnicodeString(M: TMemoryStream): UnicodeString;
begin
SetString(Result, M.Memory, (M.Size div SizeOf(WideChar)) - 1);
end;
function MemoryStreamToString(M: TMemoryStream): String;
begin
SetString(Result, M.Memory, (M.Size div SizeOf(Char)) - 1);
end;