Moden通讯和串口通讯的问题(200分大出血啊!急!急!)(200分)

  • 主题发起人 主题发起人 redweek
  • 开始时间 开始时间
R

redweek

Unregistered / Unconfirmed
GUEST, unregistred user!
我要做一个串口通讯的程序,用Moden拨号建立连间,先初始化串口,然后等对方拨号,当<br>对方拨号过来,我收到“ring”和“connect 19200”就表示可以向串口发送数据了,问题在于<br>我初始化串口时出问题了:<br>&nbsp; &nbsp; &nbsp;我定义了一个<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dcb:Tdcb; //结构体,该结构体在有很多成员在DElphi 4.0下找不到???<br>&nbsp; &nbsp; 用windows api 函数实现,程序如下:<br>procedure TForm1.FormCreate(Sender: TObject);<br>begin<br>&nbsp; &nbsp; Hcomm:=CreateFile('com1',generic_read or generic_write,0,nil,open_existing,file_flag_overlapped,0);<br>&nbsp; &nbsp; GetcommTimeouts(Hcomm,Mycommtimeouts);<br>&nbsp; &nbsp; Mycommtimeouts.ReadIntervalTimeout :=5000;<br>&nbsp; &nbsp; Setcommtimeouts(Hcomm,Mycommtimeouts);<br>&nbsp; &nbsp; Getcommstate(Hcomm,Dcb);<br><br>&nbsp; &nbsp; Dcb.baudrate:=19200;<br>&nbsp; &nbsp; Dcb.stopbits:=onestopbit;<br>&nbsp; &nbsp; Dcb.ByteSize :=8;<br>&nbsp; &nbsp; Dcb.parity:=NOPARITY;<br><br>&nbsp; &nbsp; Dcb.fOutX:=false;<br>&nbsp; &nbsp; dcb.fInX:=false;<br>&nbsp; &nbsp; Dcb.fOutxCtsFlow:=true;//编译器找不到fOutxCtsFlow<br>&nbsp; &nbsp; Dcb.fOutxDsrFlow:=true;;//编译器找不到fOutxDsrFlow<br>&nbsp; &nbsp; Dcb.fDtrControl:=DTR_CONTROL_ENABLE;//编译器找不到fDtrControl(设置MOdem 的DTR)<br>&nbsp; &nbsp; Dcb.fRtsControl:=RTS_CONTROL_ENABLE;;//编译器找不到fRtsControl(设置MOdem 的Rts)<br>&nbsp; &nbsp; Dcb.fDsrSensitivity:=true;<br><br>end;<br>&nbsp; &nbsp;这些Dcb成员在帮助里都有,为什么编译器找不到,Delphi 4.0的dcb结构体也没有,那他们在那?<br>&nbsp; 那位高手能回答???<br>
 
根本没有你说的那些东西呀,我看了Tdcb的结构申明,<br>并没有你说的那些东西,你在哪里看到的?<br>下面是我在delphi 5里的window.pas找到的dcb结构,你看看吧。<br>&nbsp; _DCB = packed record<br>&nbsp; &nbsp; DCBlength: DWORD;<br>&nbsp; &nbsp; BaudRate: DWORD;<br>&nbsp; &nbsp; Flags: Longint;<br>&nbsp; &nbsp; wReserved: Word;<br>&nbsp; &nbsp; XonLim: Word;<br>&nbsp; &nbsp; XoffLim: Word;<br>&nbsp; &nbsp; ByteSize: Byte;<br>&nbsp; &nbsp; Parity: Byte;<br>&nbsp; &nbsp; StopBits: Byte;<br>&nbsp; &nbsp; XonChar: CHAR;<br>&nbsp; &nbsp; XoffChar: CHAR;<br>&nbsp; &nbsp; ErrorChar: CHAR;<br>&nbsp; &nbsp; EofChar: CHAR;<br>&nbsp; &nbsp; EvtChar: CHAR;<br>&nbsp; &nbsp; wReserved1: Word;<br>&nbsp; end;
 
冰封:<br>&nbsp; &nbsp; &nbsp;你好,你在DElphil写程序的地方写上Getcommstate,用鼠标涂黑,按F1可以看到Windows<br>API函数Getcommstate的帮助,在该帮助里,你可以点击“DCB”结构体的说明,可以看到Windows<br>API封装的DCB的成员有30个之多,而你连出的是DElphi封装的TDCb的十几个成员,我问的问题是<br>在Windows api里的Dcb有些成员在delphil的Tdcb里没有!!为什么?<br>   我的程序我自己已经搞腚了,但Delphi它妈的为什么要重新封装API函数?它封装后,我怎么知道它封装了,<br>在那里可以查到?比如说:Delphi封装了Shellexecute windows Api函数,必须在Delphi的<br>Uses 里添加ShellApi单元字段,才能使用,那么,当我遇到另外一个Api函数时,我怎么知道delphi是不是封装了,<br>如果封装了,封装在那个单元?我该怎么一步一步查?我已经说的很明被了,<br>    请高手回答!!!
 
太简单了, Delphi几乎封装了所有的windows api函数。一般函数名不变。<br>你要知道包含在那个单元中。只要用windows的查找文件对话框,<br>在包含文字中输入你要查找的API函数名,查找的文件名输入<br>*.pas 。 找到后,uses 该单元就一切搞定。<br><br>understand ???, 别忘给我加分! &nbsp;:-)<br><br><br><br><br>
 
redweek,我记得好象可以直接使用库文件,而不用通过DELPHI封装过的单元。<br>不知道我有没有记错,具体方法我忘了。
 
多人接受答案了。
 
后退
顶部