OleVariant流到TStringList优化
|
我的服务器通过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;
没有找到相关结果
已邀请:
1 个回复
吞睫素
创建一个包含
内容的Delphi字符串,然后将该字符串分配给
。如果您具有UTF8数据,则将UTF8字符串传递给
。 使用
仍涉及中间缓冲区分配,因此我想真正的好选择是一个只读
后代,您可以传递一个指针和一个大小。您可以将该流传递给
。写这样的东西很容易。 您实际上是否有性能问题?如果不是,那为什么要改变当前的方法。