代码如下:
procedure TPerformSocket.PerformGetAllPos(DeptID: string; SocketID: string);      //取得所有的吧台
var
  wl: string;
  SocketTo: TCustomWinSocket;
  PSendInfo: pwidechar;
begin
  SocketTo := TCustomWinSocket.Create(StrToInt(SocketID));
  wl := 'select PosName from T_Pos where DeptID = ' + '''' + DeptID + '''';
  if DM.SearchSQL(wl, DM.AQ) then
  begin
    wl := '';
    while not DM.AQ.Eof do
    begin
      wl := wl + DM.AQ.FieldByName('PosName').AsString + ',';
      DM.AQ.Next;
    end;
    GetMem(PSendInfo, Length(wl));
    PSendInfo := pwidechar(wl);  //这个地方转换完以后PsendInfo就变成乱码了
    SocketTo.SendBuf(PSendInfo^, Length(PSendInfo));
  end
  else
  begin
    SocketTo.SendText('');
  end;
//谢谢了

解决方案 »

  1.   

    >>PSendInfo := pwidechar(wl);  //这个地方转换完以后PsendInfo就变成乱码了你跟踪了吗?是在这个地方变成了乱码还是客户端接收到的是乱码?
      

  2.   

    wl你是STRING型啊..
    要先转换一次吧.
    var
      wstr:WideString;
    ....  wstr:=wl;
    sendInfo := pwidechar(wstr);  
    另外..你这儿也错了..
    ...
        GetMem(PSendInfo, Length(wl));这儿你为指针分配了内存.
        PSendInfo := pwidechar(wl); 这儿你却把指针指向了另一个地方.
                                   前面分配的那块内存是永远不会用到..也释放不了..
    ....