奇怪的现象,给看看帮忙。(50分)

  • 主题发起人 主题发起人 Black_7_1
  • 开始时间 开始时间
B

Black_7_1

Unregistered / Unconfirmed
GUEST, unregistred user!
var
tmpBuff:Pchar;
Success:Boolean;
iData:Byte;
.....
//把读来的Buffer放在了tempBuff^里了:
Success:=ReadFile(hCommDev,tempBuff^,RxCount,dwReadByte,@read_os) or (GetLastError = ERROR_IO_PENDING);
然后,
iData:=Byte(tempBuffer^);
为什么iData总是为0?
 
调试时候明显看到:tempBuff = 75 的。
还有:我在 iData := Byte(tempBuff^) 这条语句前加上断点的话,
走一步,发现iData=75了,不加断点,或者断点加在后一条语句上,发现idata=0;
郁闷呀。。。。。。
 
>>tempBuff = 75
不是吧... tempBuff是指针,如论如何都应该非常大才对(至少大于exe映像的起始加载
地址)。
之前给tempBuff分配了空间吗?——如果用静态数组,调用的时候用tempBuff[0]传参,
如果用指针,那么之前就要用GetMem之类的方法分配内存才行。我估计您说的加不加断点的
差别就是内存分配造成的问题。
 
只是找到原因了:
我写的是读串口的程序
Success:=ReadFile(hCommDev,tempBuff^,RxCount,dwReadByte,@read_os) or (GetLastError = ERROR_IO_PENDING);
这个时候,把读来的Buffer放在了tempBuff^的时候,发现Sleep(100),后就可以读到。
原来是个延迟,问题又来了。这个Sleep(?)呢?
又怎么判断呢?
另外注意点的是:我的串口发送是从一台机器上的串口发送到Internet上的串口上去。
难道还要判断网络速度?
 
接受答案了.
 
后退
顶部