非常奇怪的问题,征解100分

gey 2004-10-22 03:32:11
这是DLL里的函数声明:

Function ReadStreamData(const hChannelHandle:HANDLE;var DataBuf;var Length:DWORD;var FrameType:TFrameType_t):Integer;stdcall;

我的程序里是这么用的

procedure TForm1.OnDataRead(var Message: TMessage);
var
cn:Integer;
Length:DWORD;
DataBuffer:array[0..500000-1] of Byte;
ft:TFrameType_t;
begin
cn:=Message.WParam;
size:=Message.LParam;
Length:=500000;
ReadStreamData(ChannelHND[cn],DataBuffer,Length,ft);
if Length <> 0 then
Memo1.Lines.Add(IntToStr(Length));
end;

非常奇怪,每次Length都是0.
如果把最后一句换成;
Memo1.Lines.Add('');
放一个断点在那这句上,可以看到Length都正常,不为0,谁知道为什么???
...全文
109 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ly_liuyang 2004-10-23
  • 打赏
  • 举报
回复
不要使用Delphi的函数名做参数

http://lysoft.7u7.net
ksaiy 2004-10-22
  • 打赏
  • 举报
回复
你可以先换一个length的名字看看...
WGYKING 2004-10-22
  • 打赏
  • 举报
回复
可能和多线程或共享内存有关
rjy206 2004-10-22
  • 打赏
  • 举报
回复
up
耙子 2004-10-22
  • 打赏
  • 举报
回复
我的怀疑是 length 是delphi的函数名字,
Memo1.Lines.Add(IntToStr(Length));
可能等效于
Memo1.Lines.Add(IntToStr(Length('')));了
hottey 2004-10-22
  • 打赏
  • 举报
回复
我觉得应该是ReadStreamData 对Length的var传递是不是修改了它的值了,偶也不太清楚,看看ReadStreamData 的实现啊!
耙子 2004-10-22
  • 打赏
  • 举报
回复
你把Length改一个名字再看看
Bitter_fish 2004-10-22
  • 打赏
  • 举报
回复
我想:
  出鬼了!不可能吧!
aiirii 2004-10-22
  • 打赏
  • 举报
回复
>>放一个断点在那这句上,可以看到Length都正常,不为0,谁知道为什么???

想不通, 如果是這樣, 你可試下:

sleep(10);// 或者 Application.ProcessMessage;
if Length <> 0 then

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧