Мой сервер возвращает поток строк как OleVariant через вызов COM / DCOM.Этот код хорошо работает для клиента, но, вероятно, может быть улучшен.Подсказки приветствуются.
И, как следствие, что, если сервер возвращает поток OleVariant как UTF-8, каков наилучший способ для клиента преобразовать его в Unicode?
procedure TClientToServer.GetText( mode : integer;
const infoText : widestring;
txt : TStrings);
var
size : integer;
dataP : pointer;
data : OleVariant;
strStream : TStringStream;
begin
txt.Clear;
data:= fDComServer.GetData( mode,infoText);
if VarIsNull(data) then Exit;
size:= VarArrayHighBound(data,1) + 1;
dataP:= VarArrayLock( data);
try
strStream:= TStringStream.Create;
try
strStream.Write( dataP^,size);
strStream.Seek(0,0);
txt.LoadFromStream( strStream);
finally
strStream.Free;
end;
finally
VarArrayUnlock( data);
end;
end;
Редактировать: переход на UTF8 означает, что в сети используется меньшая пропускная способность, и я могу более или менее использовать подпрограммы COM / DCOM при дальнейшей реализации интерфейса протокола http на основе строк UTF8.
Спасибо Дэвиддля направления меня в правильном направлении, чтобы немного урезать код.
Вот обновленная процедура:
procedure TClientToServer.GetText( mode : integer;
const infoText : widestring;
txt : TStrings);
var
size : integer;
dataP : Pointer;
data : OleVariant;
utf8Str : Utf8String;
begin
txt.Clear;
data:= fDComServer.GetData( mode,infoText);
if VarIsNull(data) then Exit;
size:= VarArrayHighBound(data,1) + 1;
dataP:= VarArrayLock( data);
try
SetString( utf8Str, PAnsiChar(dataP), size);
txt.Text:= utf8Str;
finally
VarArrayUnlock( data);
end;
end;