关于win2000下发送和接受消息(200分)

  • 主题发起人 主题发起人 dongliang110
  • 开始时间 开始时间
D

dongliang110

Unregistered / Unconfirmed
GUEST, unregistred user!
在windows2000下用sendmessage向另一应用程序发送数据,应样发送和接收数据.我的应用程序<br>在win98下接收数据没有问题,但是在2000下接收数据就有问题,当数据大于48个字节时就只能接收前48个字节.<br>是不是sendmessage不支持win2000.请高手赐教.<br>我的接收和发送代码如下:<br>&nbsp; 发送:<br>function TOil_Station.fnbSendCommand(CommandString:String):boolean;<br>var<br>&nbsp; ds: TCopyDataStruct;<br>&nbsp; hd: THandle;<br>begin<br>&nbsp; CommandString:=fnsHex_To_Bin(CommandString);<br>&nbsp; ds.cbData := Length(CommandString) ;<br>&nbsp; GetMem(ds.lpData, ds.cbData+1 ); //为传递的数据区分配内存<br>&nbsp; move(CommandString[1],ds.lpData^,Length(CommandString));<br>&nbsp; Hd := FindWindow(pchar(ClientWindowName),nil);//FindWindow (nil, 'Form2'); // 获得接受窗口的句柄<br>&nbsp; if Hd &lt;&gt; 0 then<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; SendMessage(Hd, WM_COPYDATA, Handle,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Cardinal(@ds)); // 发送WM_COPYDATA消息 WM_COPYDATA<br>&nbsp; &nbsp; &nbsp; Result:=True;<br>&nbsp; &nbsp; end<br>&nbsp; else<br>&nbsp; &nbsp; Result:=False;<br>&nbsp; &nbsp; FreeMem(ds.lpData,ds.cbData+1); //释放资源<br>end;<br>接收: &nbsp;<br>&nbsp;tempStr:=Copy(String(t.CopyDataStruct.lpData),1,t.CopyDataStruct.cbData);<br>&nbsp;DataString:=fnsBin_To_Hex(TempStr);<br>&nbsp;if Length(DataString)&lt;2 then<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; //Application.MessageBox ('数据包不足一个字节','错误',MB_OK+MB_ICONINFORMATION);<br>&nbsp; &nbsp; &nbsp; pSetlog('数据包不足一个字节:'+DataString);<br>&nbsp; &nbsp; &nbsp; Exit;<br>&nbsp; &nbsp; end;<br><br>
 
sendmessage肯定支持win2000<br>但是 2000下只能接收前48个字节我就不知道了<br>学习!
 
高手快来啊!<br>我刚才发现,当一个应用程序间发送和接收数据时,数据都能正常接收<br>,如果是两个应用程序间发送 和接收只能接收48个字节。
 
仔细进行调试,我觉得不应该有问题 。
 
问题已经缍找到了,因为我用fnsBin_To_Hex(TempStr)对数据进行了处理.<br>所以用String接收数据时,只接收48个字节.散分了.
 
后退
顶部