代码如下:
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;
//谢谢了
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;
//谢谢了
要先转换一次吧.
var
wstr:WideString;
.... wstr:=wl;
sendInfo := pwidechar(wstr);
另外..你这儿也错了..
...
GetMem(PSendInfo, Length(wl));这儿你为指针分配了内存.
PSendInfo := pwidechar(wl); 这儿你却把指针指向了另一个地方.
前面分配的那块内存是永远不会用到..也释放不了..
....