Var Data,Data1:widestring;然后给Data:='abcdefgh'SetLength(FileOkBuf,Length(Data)+1);
copymemory(@FileOkBuf[0],@Data[1],length(Data));
FileOkBuf[length(FileOkBuf)-1]:=0;
Setlength(data1,length(data));
CopyMemory(@Data1[1],@FileOkBuf[0],length(data));
可是Data1却是乱码.
怎解???

解决方案 »

  1.   

    Var
      Len: Integer;
      Data,Data1, FileOkBuf:widestring;
    begin
      Data:='abcdefghiiii';
      SetLength(FileOkBuf,Length(Data);
      copymemory(PChar(FileOkBuf), PChar(Data),Len*2);  Setlength(data1,length(data));
      CopyMemory(PChar(Data1), PChar(FileOkBuf),length(data)*2);
      ShowMessage(Data1);我试过这样可以,因为我用String是没有问题的,但是WideString,是双字节为一个单位的,所以你*2才可以。
      

  2.   

    WideString相当于array of WideChar~~
    WideChar在内存里占用两个字节~~
    所以拷贝内存的时候要比string多一倍~~var
      Data, Data1: WideString;
      FileOkBuf: array of Byte;
    begin
      Data := 'cdefgh';
      SetLength(FileOkBuf, Length(Data) * SizeOf(WideChar) + 1);
      CopyMemory(@FileOkBuf[0], @Data[1], Length(Data) * SizeOf(WideChar));
      FileOkBuf[Length(FileOkBuf) - 1] := 0;
      SetLength(Data1, Length(data));
      CopyMemory(@Data1[1], @FileOkBuf[0], Length(Data) * SizeOf(WideChar));
      Caption := Data1;
    end;
      

  3.   

    GetMemory(FileOkBuf, sizeof(data[1]) * Length(Data)+1);
    ....
    ...