比如一个定义为:
type PACKET_HEAD = record
dwCmdLen:integer;
dwCmdID:integer;
dwCmdStatus:integer;
dwCmdSeq:integer;
end;
type SMCG_LOGINSC = record
cUserName:array[0..15] of char;
cPassword:array[0..8] of char;
end;
如何才能将PACKET_HEAD和SMCG_LOGINSC 的内容连续转换成Buf或Stream之类的进行一次发送发送,请各位高手帮助!急急急!!!谢谢
type PACKET_HEAD = record
dwCmdLen:integer;
dwCmdID:integer;
dwCmdStatus:integer;
dwCmdSeq:integer;
end;
type SMCG_LOGINSC = record
cUserName:array[0..15] of char;
cPassword:array[0..8] of char;
end;
如何才能将PACKET_HEAD和SMCG_LOGINSC 的内容连续转换成Buf或Stream之类的进行一次发送发送,请各位高手帮助!急急急!!!谢谢
解决方案 »
- 请问这样的sql如何写
- 强烈求教 sql 语句的写法问题 ‘’和;+ 问题等等
- 如何只关闭已打开的众多Word文档中的一个
- 我的XPMenu菜单设计时可用,但运行后就没有效果了,是怎么回事?
- 怎样根据文件后缀名来得到该类型文件的图标?
- 怎么样读出sybase数据库里所有的表名,急~~~~~~~~谢谢!
- 大哥们:它还是会抛出自己的错误信息!请问如何才能让那些该死的错误提示去掉?
- 将blob类型的字段存成流怎么存?请大家帮帮忙
- 网络编程高手千万留步!!!!!
- Adoquery怎么赋值给Clientdataset
- 如何改变 scrollbar 的样式 (图) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 这个问题应该比较简单,请大家近来看看
Loginhead : ^PACKET_HEAD;
gwLogin : ^SMCG_LOGINSC;
msg:pbyte; CopyMemory(Msg,Loginhead,16);
CopyMemory(Msg,gwLogin ,25);
这样行吗?好像不行,帮忙给看看!100分
dwCmdLen:integer;
dwCmdID:integer;
dwCmdStatus:integer;
dwCmdSeq:integer;
end;
type SMCG_LOGINSC = packed record
cUserName:array[0..15] of char;
cPassword:array[0..8] of char;
end; var
Loginhead : PACKET_HEAD;
gwLogin : SMCG_LOGINSC;
msg:PChar;
msg:=StrAlloc(sizeof(PACKET_HEAD)+sizeof(SMCG_LOGINSC));
move(Loginhead,msg[0],sizeof(PACKET_HEAD));
move(gwLogin,msg[sizeof(PACKET_HEAD)],sizeof(SMCG_LOGINSC));
在把两个record放入存在问题,请赐教type PACKET_HEAD = packed record
dwCmdLen:integer;
dwCmdID:integer;
dwCmdStatus:integer;
dwCmdSeq:integer;
end;
type SMCG_LOGINSC = packed record
cUserName:array[0..15] of char;
cPassword:array[0..8] of char;
end; var
Loginhead : PACKET_HEAD;
gwLogin : SMCG_LOGINSC;
msg:Pbyte;msg:=AllocMem(sizeof(PACKET_HEAD)+sizeof(SMCG_LOGINSC));
move(Loginhead,msg,sizeof(PACKET_HEAD));move(gwLogin,msg[sizeof(PACKET_HEAD)],sizeof(SMCG_LOGINSC));
ClientSocket1.Socket.SendBuf(Msg,41);
dwCmdLen:integer;
dwCmdID:integer;
dwCmdStatus:integer;
dwCmdSeq:integer;
end;
type SMCG_LOGINSC = packed record
cUserName:array[0..15] of char;
cPassword:array[0..8] of char;
end; var
Loginhead : PACKET_HEAD;
gwLogin : SMCG_LOGINSC;
msg:Pbyte;msg:=AllocMem(sizeof(PACKET_HEAD)+sizeof(SMCG_LOGINSC));
move(Loginhead,msg^,sizeof(PACKET_HEAD));move(gwLogin,(msg+sizeof(PACKET_HEAD))^,sizeof(SMCG_LOGINSC));
ClientSocket1.Socket.SendBuf(Msg^,41);
dwCmdLen:integer;
dwCmdID:integer;
dwCmdStatus:integer;
dwCmdSeq:integer;
end;
type SMCG_LOGINSC = packed record
cUserName:array[0..15] of char;
cPassword:array[0..8] of char;
end; var
Loginhead : PACKET_HEAD;
gwLogin : SMCG_LOGINSC;
msg:Pbyte;msg:=AllocMem(sizeof(PACKET_HEAD)+sizeof(SMCG_LOGINSC));
move(Loginhead,msg^,sizeof(PACKET_HEAD));move(gwLogin,(msg+sizeof(PACKET_HEAD))^,sizeof(SMCG_LOGINSC));
ClientSocket1.Socket.SendBuf(Msg^,41);
-----------------------
报错,烦请给解决一下,谢谢
move(gwLogin,(msg+sizeof(PACKET_HEAD))^,sizeof(SMCG_LOGINSC));
[Error] uMain.pas(115): Operator not applicable to this operand type
msg:string;
msg:='';
for i:=0 to 15 do
begin
msg:=msg+SMCG_LOGINSC.cUserName[i]
end;
for i:=0 to 8 do
begin
msg:=msg+SMCG_LOGINSC.cPassword[i]
end;
Tmpsocket.Socket.SendText(msg);以上可以了
或者直接
Tmpsocket.Socket.SendText(SMCG_LOGINSC.cUserName+SMCG_LOGINSC.cPassword)也应该可以。
ClientSocket1.Socket.SendBuf(PACKET_HEAD1,SizeOF(PACKET_HEAD1));
分别填充,然后集合发送。
另外,针对Char型的用StrpCopy.