就是下的一个微软的NETSerialComm.exe呀,问题就在于我不知道该作什么,也不知道该怎么用那,只知道是用来做串口编程的一个控件。

解决方案 »

  1.   

    namespace JustinIO {
    class CommPort { public int PortNum; 
    public int BaudRate;
    public byte ByteSize;
    public byte Parity; // 0-4=no,odd,even,,space 
    public byte StopBits; // 0,1,2 = 1, 1.5, 2 
    public int ReadTimeout;

    //comm port win32 file handle
    private int hComm = -1;

    public bool Opened = false;
     
    //win32 api constants
      private const uint GENERIC_READ = 0x80000000;
      private const uint GENERIC_WRITE = 0x40000000;
      private const int OPEN_EXISTING = 3;
      private const int INVALID_HANDLE_VALUE = -1;

    [StructLayout(LayoutKind.Sequential)]
    private struct DCB {
    //taken from c struct in platform sdk 
      public int DCBlength;           // sizeof(DCB) 
      public int BaudRate;            // current baud rate 
      public int fBinary;          // binary mode, no EOF check 
      public int fParity;          // enable parity checking 
      public int fOutxCtsFlow;      // CTS output flow control 
      public int fOutxDsrFlow;      // DSR output flow control 
      public int fDtrControl;       // DTR flow control type 
      public int fDsrSensitivity;   // DSR sensitivity 
      public int fTXContinueOnXoff; // XOFF continues Tx 
      public int fOutX;          // XON/XOFF out flow control 
      public int fInX;           // XON/XOFF in flow control 
      public int fErrorChar;     // enable error replacement 
      public int fNull;          // enable null stripping 
      public int fRtsControl;     // RTS flow control 
      public int fAbortOnError;   // abort on error 
      public int fDummy2;        // reserved 
      public ushort wReserved;          // not currently used 
      public ushort XonLim;             // transmit XON threshold 
      public ushort XoffLim;            // transmit XOFF threshold 
      public byte ByteSize;           // number of bits/byte, 4-8 
      public byte Parity;             // 0-4=no,odd,even,,space 
      public byte StopBits;           // 0,1,2 = 1, 1.5, 2 
      public char XonChar;            // Tx and Rx XON character 
      public char XoffChar;           // Tx and Rx XOFF character 
      public char ErrorChar;          // error replacement character 
      public char EofChar;            // end of input character 
      public char EvtChar;            // received event character 
      public ushort wReserved1;         // reserved; do not use 
    } [StructLayout(LayoutKind.Sequential)]
    private struct COMMTIMEOUTS {  
      public int ReadIntervalTimeout; 
      public int ReadTotalTimeoutMultiplier; 
      public int ReadTotalTimeoutConstant; 
      public int WriteTotalTimeoutMultiplier; 
      public int WriteTotalTimeoutConstant; 
    }  [StructLayout(LayoutKind.Sequential)]
    private struct OVERLAPPED { 
        public int  Internal; 
        public int  InternalHigh; 
        public int  Offset; 
        public int  OffsetHigh; 
        public int hEvent; 
    }  

    [sysimport(dll = "kernel32.dll")]
    private static extern int CreateFile(
      string lpFileName,                         // file name
      uint dwDesiredAccess,                      // access mode
      int dwShareMode,                          // share mode
      int lpSecurityAttributes, // SD
      int dwCreationDisposition,                // how to create
      int dwFlagsAndAttributes,                 // file attributes
      int hTemplateFile                        // handle to template file
    );
    [sysimport(dll = "kernel32.dll")]
    private static extern bool GetCommState(
      int hFile,  // handle to communications device
      ref DCB lpDCB    // device-control block
    );
    [sysimport(dll = "kernel32.dll")]
    private static extern bool BuildCommDCB(
      string lpDef,  // device-control string
      ref DCB lpDCB     // device-control block
    );
    [sysimport(dll = "kernel32.dll")]
    private static extern bool SetCommState(
      int hFile,  // handle to communications device
      ref DCB lpDCB    // device-control block
    );
    [sysimport(dll = "kernel32.dll")]
    private static extern bool GetCommTimeouts(
      int hFile,                  // handle to comm device
      ref COMMTIMEOUTS lpCommTimeouts  // time-out values
    );
    [sysimport(dll = "kernel32.dll")]
    private static extern bool SetCommTimeouts(
      int hFile,                  // handle to comm device
      ref COMMTIMEOUTS lpCommTimeouts  // time-out values
    );
    [sysimport(dll = "kernel32.dll")]
    private static extern bool ReadFile(
      int hFile,                // handle to file
      byte[] lpBuffer,             // data buffer
      int nNumberOfBytesToRead,  // number of bytes to read
      ref int lpNumberOfBytesRead, // number of bytes read
      ref OVERLAPPED lpOverlapped    // overlapped buffer
    );
    [sysimport(dll = "kernel32.dll")]
    private static extern bool WriteFile(
      int hFile,                    // handle to file
      byte[] lpBuffer,                // data buffer
      int nNumberOfBytesToWrite,     // number of bytes to write
      ref int lpNumberOfBytesWritten,  // number of bytes written
      ref OVERLAPPED lpOverlapped        // overlapped buffer
    );
    [sysimport(dll = "kernel32.dll")]
    private static extern bool CloseHandle(
      int hObject   // handle to object
    );

    public void Open() {
     
     DCB dcbCommPort = new DCB();
     COMMTIMEOUTS ctoCommPort = new COMMTIMEOUTS();
     
     
      

  2.   

      // OPEN THE COMM PORT.   
      hComm = CreateFile("COM" + PortNum ,GENERIC_READ | GENERIC_WRITE,0, 0,OPEN_EXISTING,0,0);

      // IF THE PORT CANNOT BE OPENED, BAIL OUT.
      if(hComm == INVALID_HANDLE_VALUE) {
       throw(new ApplicationException("Comm Port Can Not Be Opened"));
      }

      // SET THE COMM TIMEOUTS.

      GetCommTimeouts(hComm,ref ctoCommPort);
      ctoCommPort.ReadTotalTimeoutConstant = ReadTimeout;
      ctoCommPort.ReadTotalTimeoutMultiplier = 0;
      ctoCommPort.WriteTotalTimeoutMultiplier = 0;
      ctoCommPort.WriteTotalTimeoutConstant = 0;  
      SetCommTimeouts(hComm,ref ctoCommPort);

      // SET BAUD RATE, PARITY, WORD SIZE, AND STOP BITS.
      // THERE ARE OTHER WAYS OF DOING SETTING THESE BUT THIS IS THE EASIEST.
      // IF YOU WANT TO LATER ADD CODE FOR OTHER BAUD RATES, REMEMBER
      // THAT THE ARGUMENT FOR BuildCommDCB MUST BE A POINTER TO A STRING.
      // ALSO NOTE THAT BuildCommDCB() DEFAULTS TO NO HANDSHAKING.

      dcbCommPort.DCBlength = Marshal.SizeOf(dcbCommPort);
      GetCommState(hComm, ref dcbCommPort);
      dcbCommPort.BaudRate=BaudRate;
      dcbCommPort.Parity=Parity;
      dcbCommPort.ByteSize=ByteSize;
      dcbCommPort.StopBits=StopBits;
      SetCommState(hComm, ref dcbCommPort);
      
      Opened = true;
      
    }

    public void Close() {
    if (hComm!=INVALID_HANDLE_VALUE) {
    CloseHandle(hComm);
    }
    }

    public byte[] Read(int NumBytes) {
    byte[] BufBytes;
    byte[] OutBytes;
    BufBytes = new byte[NumBytes];
    if (hComm!=INVALID_HANDLE_VALUE) {
    OVERLAPPED ovlCommPort = new OVERLAPPED();
    int BytesRead=0;
    ReadFile(hComm,BufBytes,NumBytes,ref BytesRead,ref ovlCommPort);
    OutBytes = new byte[BytesRead];
    Array.Copy(BufBytes,OutBytes,BytesRead);

    else {
    throw(new ApplicationException("Comm Port Not Open"));
    }
    return OutBytes;
    }

    public void Write(byte[] WriteBytes) {
    if (hComm!=INVALID_HANDLE_VALUE) {
    OVERLAPPED ovlCommPort = new OVERLAPPED();
    int BytesWritten = 0;
    WriteFile(hComm,WriteBytes,WriteBytes.Length,ref BytesWritten,ref ovlCommPort);
    }
    else {
    throw(new ApplicationException("Comm Port Not Open"));
    }
    }
    } class HexCon {
    //converter hex string to byte and byte to hex string
    public static string ByteToString(byte[] InBytes) {
    string StringOut="";
    foreach (byte InByte in InBytes) {
    StringOut=StringOut + String.Format("{0:X2} ",InByte);
    }
    return StringOut; 
    }
    public static byte[] StringToByte(string InString) {
    string[] ByteStrings;
    ByteStrings = InString.Split(" ".ToCharArray());
    byte[] ByteOut;
    ByteOut = new byte[ByteStrings.Length-1];
    for (int i = 0;i==ByteStrings.Length-1;i++) {
    ByteOut[i] = ("0x" + ByteStrings[i]).ToByte();

    return ByteOut;
    }
    }
    }
      

  3.   

    你那个多是使用原来的API我想问的是有没有可以直接在C#下访问串口USB口并口的对象啊?
    先谢谢了。
      

  4.   

    to  tianjh(苍穹彗星)
    我问的好像就是你要的。不过兄弟问的好像更多:)最好兄弟自己也开个帖子问一下:)多谢兄弟们帮我顶!:)
      

  5.   

    to: tianjh(苍穹彗星),USB口要用DDK开发驱动程序的,USB的全称是通用串行总线,不是简单的数据IO。