急啊.variant 与widestring之间的转换.遇到#00就把剩下的扔了. ( 积分: 100 )

  • 主题发起人 主题发起人 zzsczz
  • 开始时间 开始时间
Z

zzsczz

Unregistered / Unconfirmed
GUEST, unregistred user!
program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils,Variants;
var v1 :Variant;
i :integer;
ths : widestring;

s:widestring;

begin
{ TODO -oUser -cConsole Main : Insert code here }

ths:='';
for i:= 0 to 255
do
begin
ths :=ths + widechar(i)
end;

v1 := ths;

writeln(length(ths));

// s:= VarToWideStr(ths);
s:= VarToWideStr(v1);

writeln(length(s));


end.




ths和s的长度一个是256,一个是0.

如何解决呢?

类似的问题:我用com返回bstr,中间有#00,delphi转回widestr就把剩下的(包括#00)扔了.

但是输入的widestr中有#00却没有问题

如何解决?
 
program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils,Variants;
var v1 :Variant;
i :integer;
ths : widestring;

s:widestring;

begin
{ TODO -oUser -cConsole Main : Insert code here }

ths:='';
for i:= 0 to 255
do
begin
ths :=ths + widechar(i)
end;

v1 := ths;

writeln(length(ths));

// s:= VarToWideStr(ths);
s:= VarToWideStr(v1);

writeln(length(s));


end.




ths和s的长度一个是256,一个是0.

如何解决呢?

类似的问题:我用com返回bstr,中间有#00,delphi转回widestr就把剩下的(包括#00)扔了.

但是输入的widestr中有#00却没有问题

如何解决?
 
没有办法,0是串结束。得把它换了。
 
s:= VarToWideStr(v1);
 
真的没办法了吗?
我以前用的是把str转成int array,调用com的方法,返回int array,再还原成str.太累了....
 
改了s:= VarToWideStr(v1);.笔误

结果和没改的相同.长度还是不同
 
在freepascal2.0下编译的结果是:2个255
 
后退
顶部