用api函数写的
能收发数据就行
[email protected]

解决方案 »

  1.   

    http://ourworld.compuserve.com/homepages/TK_Boyd/Dt5f.htm 2.2 调用Windows95下的API函数
      Windows95对通信功能的支持非常强,它增加了一系列用于通信的API函数供用户调用。同样,要进行串行通信,也需要先对串口进行初始化。Windows95把串行口作为设备文件,对串口操作就是对文件操作。因此,必须先为串口分配1个文件句柄,以后对串口操作都将通过 这个文件句柄来完成。初始化过程如下:
      (1)调用CreateFile函数为串口分配1个文件句柄。
      Var HComm:THandle;
      HComm:=CreateFile(‘COM2',GENERICREAD or GENERICWRITE ,0,@NULL,OPENEXISTING,FILEFLAGOVERLAPPED,0);
      如果对串行口1操作,用字符串COM1代替COM2即可。
      (2)调用SetupComm函数设置串行口的输入和输出缓存区。
      SetupComm(HComm,1024,1024);
      (3)填充1个DCB(设备控制块)结构来设置通信参数。通过调用GetCommState函数获得当前系统的DCB结构,按需要赋值给DCB的成员,如波特率、奇偶校验、数据位、停止位等,最后将创建后的DCB结构作为参数传给SetCommState函数就可以初始化串口了。  Var DCB:TDCB;
      GetCommState(HComm,DCB);
      BuildCommDCB(‘9600,N,8,1',DCB);
      SetCommState(HComm,DCB);
      (4)用PurgeComm函数来清除接收缓存区的内容。
      PurgeComm(HComm,PurgeRXCLEAR);  (5)串行口的初始化完成后,接下来的工作就是根据通信协议发送和接收串行口上的数据。R eadFile函数用于接收数据,WriteFile函数用于发送数据。  Var
      OverLapped:TOverLapped;
      DataIn:Byte;
      DataOut:Byte;
      BufferSize:Integer;
      COMSTAT cs;
      ReadFile(HComm,DataIn,cs.cbInQue,BufferSize,@OverLapped);
       {从串行口读输入缓存的字节,存入DataIn变量中}
      WriteFile(HComm,DataOut,cs.cbOutQue,BufferSize,@OverLapped);
       {向串行口写输出缓存的字节,要写的数据存放在DataOut}
      按照上述步骤,再根据前面的通信协议,即可完成串行通信。
    2.3 调用其它语言编写的DLL
      由于这里所说的其它语言包含面很广,可以是开发人员所熟悉的编程语言(只要其支持DLL即可),如C和C++等,所以如何编写DLL就不再详述了。将编写好的DLL进行编译,然后把编译通过后的DLL放在\Windows\System子目录下,在Delphi下打开1个单元文件,将DLL里的所 有函数在单元文件中声明,格式如下:  unit UnitName;
      interface
      procedure p1(param1:type1;param2:type2;...);stdcall;
      external‘DLLName';
      …
      implementation
      end  其中UnitName为单元文件名,p1为调用过程名,param1、param2为参数名,type1、type2为 参数类型名,DLLName为DLL名。串行通信时,只要将此单元包含进编程单元就行了。