这是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,谁知道为什么???

解决方案 »

  1.   

    >>放一个断点在那这句上,可以看到Length都正常,不为0,谁知道为什么???想不通, 如果是這樣, 你可試下: sleep(10);// 或者  Application.ProcessMessage;
     if Length <> 0 then
      

  2.   

    我觉得应该是ReadStreamData 对Length的var传递是不是修改了它的值了,偶也不太清楚,看看ReadStreamData 的实现啊!
      

  3.   

    我的怀疑是 length 是delphi的函数名字,
    Memo1.Lines.Add(IntToStr(Length));
    可能等效于 
    Memo1.Lines.Add(IntToStr(Length('')));了
      

  4.   

    你可以先换一个length的名字看看...
      

  5.   

    不要使用Delphi的函数名做参数http://lysoft.7u7.net