不用MSCOMM和SPCOMM(不是我的意思)。
同一台计算机,XP操作系统,COM1与COM2下互发数据,按书上说的例子也搞不定,请各位大侠帮忙。
1) CreateFile是没有问题:
 SendComFile := CreateFile('COM1',Generic_Write,0,nil,Open_Existing,File_Flag_overlapped,0);
  
  ReceiveComFile := CreateFile('COM2',Generic_Read,0,nil,Open_Existing,File_Flag_overlapped,0);2)设置参数如下:
  SendComFileDCB.BaudRate := 9600;
  SendComFileDCB.Parity := NoParity;
  SendComFileDCB.ByteSize :=8;
  SendComFileDCB.StopBits :=OneStopBit;
  SetupComm(SendComFile,1024,1024);
  SetCommMask(SendComFile,EV_RxChar);  ReceiveComFileDCB.BaudRate := 9600;
  ReceiveComFileDCB.Parity := NoParity;
  ReceiveComFileDCB.ByteSize :=8;
  ReceiveComFileDCB.StopBits :=OneStopBit;
  SetupComm(ReceiveComFile,1024,1024);
  SetCommMask(ReceiveComFile,EV_TxEmpty);3)点一个按钮:发送语句如下:
  SendBuffer := Pchar(MemoSend.Text);
  NumberOfWrite := Length(MemoSend.Text);
  WriteFile(SendComFile,SendBuffer,NumberofWrite,NumberOfWriten,0);4)点一个按钮,接收请句如下:
  BClear := ClearCommError(ReceiveComFile,lpErrors,@ComState);
  if BClear then
  begin
    NumberOfRead := Comstate.cbInQue;
    ReadFile(ReceiveComFile,ReceiveBuffer,NumberOfRead,NumberOfReadn,0);
    showmessage(ReceiveBuffer);
   end;
没有别的功能,只是这样简单的功能,便就是收不到,ReceiveBuffer是一个别码,每次都一样。我想API是不是像MSCOMM一样,这边OUTPUT,那边INPUT,就搞定了。重点想知道,WriteFile和ReadFile中的两上要发送/接收的字节数,实际发送接收的字节数,具体要怎样设置,特别是后者,给我的感觉不清楚。多谢!!多谢!!

解决方案 »

  1.   

    我有黄军的《DELPHI串口通信编程》,按上面的例子不行,请做个这方面东西的大侠指教,分不够可再给!
      

  2.   

    Using the serial ports in Delphi under Win32 platforms
    http://www.commlinx.com.au/delphi_comms.htm
      

  3.   

    Delphi环境下串行通信应用程序设计
    http://www.powerba.com/develop/delphi/article/20001019001.htm
      

  4.   

    1) CreateFile是没有问题:
     SendComFile := CreateFile('COM1',Generic_Write,0,nil,Open_Existing,0,0);
      
      ReceiveComFile := CreateFile('COM2',Generic_Read,0,nil,Open_Existing,0,0);2)设置参数如下:
      GetCommState(SendComFile,SendComFileDCB);
      SendComFileDCB.BaudRate := 9600;
      SendComFileDCB.Parity := NoParity;
      SendComFileDCB.ByteSize :=8;
      SendComFileDCB.StopBits :=OneStopBit;
      SetCommState(SendComFile,SendComFileDCB);
      SetupComm(SendComFile,1024,1024);
      SetCommMask(SendComFile,EV_RxChar);  GetCommState(ReceiveComFile,ReceiveComFileDCB);
      ReceiveComFileDCB.BaudRate := 9600;
      ReceiveComFileDCB.Parity := NoParity;
      ReceiveComFileDCB.ByteSize :=8;
      ReceiveComFileDCB.StopBits :=OneStopBit;
      SetCommState(ReceiveComFile,ReceiveComFileDCB);
      SetupComm(ReceiveComFile,1024,1024);
      SetCommMask(ReceiveComFile,EV_TxEmpty);3)点一个按钮:发送语句如下:
      SendBuffer := Pchar(MemoSend.Text);
      NumberOfWrite := Length(MemoSend.Text);
      WriteFile(SendComFile,SendBuffer,NumberofWrite,NumberOfWriten,0);4)点一个按钮,接收请句如下:
      BClear := ClearCommError(ReceiveComFile,lpErrors,@ComState);
      if BClear then
      begin
        NumberOfRead := Comstate.cbInQue;
        ReadFile(ReceiveComFile,ReceiveBuffer,NumberOfRead,NumberOfReadn,0);
        ReceiveBuffer[NumOfRead] = 0;
        showmessage(ReceiveBuffer);
       end;
      

  5.   

    傅远山:That's easy!
    给我发个Email:[email protected],
    我发给你源代码!帮你搞定!记得给我分,money也行!呵
      

  6.   

    你的两个按钮能同时点吗?用接收事件出发才可以吧。
    =========================
    欢迎使用 CSDN 论坛助手  .....   [助您多、快、好、爽地上csdn...]
    Http://www.ChinaOK.net/csdn/csdn.rar
    最新版本:2003年3月2日