【发布时间】:2011-08-04 22:56:24
【问题描述】:
我的服务器通过 COM/DCOM 调用将字符串流作为 OleVariant 返回。 此代码适用于客户端,但可能需要改进。 欢迎提示。
作为后续,如果服务器将 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 意味着在网络上使用的带宽更少,并且在以后实现基于 UTF8 字符串的 http 协议接口时,我可以或多或少完整地重用 COM/DCOM 例程。
感谢 David 为我指出正确的方向来稍微修剪代码。
这是更新的程序:
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;
【问题讨论】: