//......省略//定义类型
type
TKeyEvent=(KE_DOWN,KE_UP);type
PKeyBoardData=^TKeyBoardData;
TKeyBoardData=Packed record
VKey:Word;
VKeyEent:TKeyEvent;
ShiftState:TShiftState;
end; //......省略//发送单元
//发送
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
pbd:PKeyBoardData;
begin
//......省略
GetMem(pbd,sizeof(TKeyBoardData));
//FillChar(pbd,sizeof(TKeyBoardData),$0);
with Pbd^ do
begin
VKey:=Key;
VKeyEent:=KE_DOWN;
shiftState:=Shift;
end;
self.ClientSocket.SendBuf(pbd,sizeof(TKeyBoardData));
FreeMem(pbd);
end;//接收单元
//接收
procedure TForm1.ServerSocketOnClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
pbd:PKeyBoardData;
begin
GetMem(pbd,Socket.ReceiveLength);
Socket.ReceiveBuf(pbd,Socket.ReceiveLength);
with pbd^ do
//检查
showmessage(inttostr(VKey));//我得到的按键不对不知为何?
freeMem(pbd);
end;
////////////请高手帮忙解决,小弟非常感谢
type
TKeyEvent=(KE_DOWN,KE_UP);type
PKeyBoardData=^TKeyBoardData;
TKeyBoardData=Packed record
VKey:Word;
VKeyEent:TKeyEvent;
ShiftState:TShiftState;
end; //......省略//发送单元
//发送
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
var
pbd:PKeyBoardData;
begin
//......省略
GetMem(pbd,sizeof(TKeyBoardData));
//FillChar(pbd,sizeof(TKeyBoardData),$0);
with Pbd^ do
begin
VKey:=Key;
VKeyEent:=KE_DOWN;
shiftState:=Shift;
end;
self.ClientSocket.SendBuf(pbd,sizeof(TKeyBoardData));
FreeMem(pbd);
end;//接收单元
//接收
procedure TForm1.ServerSocketOnClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
pbd:PKeyBoardData;
begin
GetMem(pbd,Socket.ReceiveLength);
Socket.ReceiveBuf(pbd,Socket.ReceiveLength);
with pbd^ do
//检查
showmessage(inttostr(VKey));//我得到的按键不对不知为何?
freeMem(pbd);
end;
////////////请高手帮忙解决,小弟非常感谢
Socket.ReceiveBuf(pbd,Socket.ReceiveLength);两句都不对, SendBuf和 ReceiveBuf 的(const Buf;... 是个无值类型,相当于一个对像引用, 有时很不方便, 你给个指针就会取指针自已所有内存区的值(一个Integer), 超过部分未知ClientSocket.SendBuf(pbd^,sizeof(TKeyBoardData)); 就对了
Socket.ReceiveBuf(pbd^,Socket.ReceiveLength);
用 Pchar(string) 我就照办了,是啊我又错了哎!
OK高手出马就是不一样
非常感谢仁兄!