CreateFile()で開きます。
BOOL GetCommState( HANDLE hFile, // 通信デバイスのハンドル LPDCB lpDCB // DCB(デバイス制御ブロック)構造体へのポインタ );GetCommState 関数 | MSDN
BOOL SetCommState( HANDLE hFile, // 通信デバイスのハンドル LPDCB lpDCB // DCB(デバイス制御ブロック)構造体へのポインタ );SetCommState 関数 | MSDN
typedef struct _DCB {
DWORD DCBlength;
DWORD BaudRate;
DWORD fBinary :1;
DWORD fParity :1;
DWORD fOutxCtsFlow :1;
DWORD fOutxDsrFlow :1;
DWORD fDtrControl :2;
DWORD fDsrSensitivity :1;
DWORD fTXContinueOnXoff :1;
DWORD fOutX :1;
DWORD fInX :1;
DWORD fErrorChar :1;
DWORD fNull :1;
DWORD fRtsControl :2;
DWORD fAbortOnError :1;
DWORD fDummy2 :17;
WORD wReserved;
WORD XonLim;
WORD XoffLim;
BYTE ByteSize;
BYTE Parity;
BYTE StopBits;
char XonChar;
char XoffChar;
char ErrorChar;
char EofChar;
char EvtChar;
WORD wReserved1;
} DCB, *LPDCB;
DCB structure (Windows) | MSDN
BOOL SetCommTimeouts( HANDLE hFile, // 通信デバイスのハンドル LPCOMMTIMEOUTS lpCommTimeouts // COMMTIMEOUTS( 通信タイムアウト)構造体へのポインタ );SetCommTimeouts 関数 | MSDN
typedef struct _COMMTIMEOUTS {
DWORD ReadIntervalTimeout;
DWORD ReadTotalTimeoutMultiplier;
DWORD ReadTotalTimeoutConstant;
DWORD WriteTotalTimeoutMultiplier;
DWORD WriteTotalTimeoutConstant;
} COMMTIMEOUTS, *LPCOMMTIMEOUTS;
COMMTIMEOUTS structure (Windows) | MSDN
BOOL WriteFile( HANDLE hFile, // ファイルのハンドル LPCVOID lpBuffer, // データバッファ DWORD nNumberOfBytesToWrite, // 書き込み対象のバイト数 LPDWORD lpNumberOfBytesWritten, // 書き込んだバイト数 LPOVERLAPPED lpOverlapped // オーバーラップ構造体のバッファ );WriteFile 関数 | MSDN
BOOL ReadFile( HANDLE hFile, // ファイルのハンドル LPVOID lpBuffer, // データバッファ DWORD nNumberOfBytesToRead, // 読み取り対象のバイト数 LPDWORD lpNumberOfBytesRead, // 読み取ったバイト数 LPOVERLAPPED lpOverlapped // オーバーラップ構造体のバッファ );ReadFile 関数 | MSDN
BOOL CloseHandle(
HANDLE hObject // オブジェクトのハンドル
);
CloseHandle 関数 | MSDN
HANDLE hComm; // ファイルのハンドラ // ポートのオープン hComm = CreateFile( "COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if( hComm == INVALID_HANDLE_VALUE ) return; // 通信条件の設定 DCB lpDCB; if( !GetCommState( hComm, &lpDCB ) ) return; lpDCB.BaudRate = 115200; // 転送速度の指定 (115200bps) lpDCB.ByteSize = 8; // ビット長の指定 (8bit) lpDCB.Parity = NOPARITY; // パリティ方式 (パリティなし) lpDCB.StopBits = ONESTOPBIT; // ストップビット数の指定 (1bit) lpDCB.fOutxCtsFlow = 0; // 以下 フロー制御 lpDCB.fOutxDsrFlow = 0; lpDCB.fDtrControl = 0; lpDCB.fOutX = 0; lpDCB.fInX = 0; lpDCB.fRtsControl = 0; if( !SetCommState( hComm, &lpDCB ) ) return; // タイムアウトの設定 COMMTIMEOUTS lpCommTimeouts; lpCommTimeouts.ReadIntervalTimeout = 500; // 全文字の読み込み時間 lpCommTimeouts.ReadTotalTimeoutMultiplier = 0; // 読み込みの1文字あたりの待ち時間 lpCommTimeouts.ReadTotalTimeoutConstant = 500; // 読み込みエラー検出用のタイムアウト時間 lpCommTimeouts.WriteTotalTimeoutMultiplier = 0; // 書き込みの1文字あたりの待ち時間 lpCommTimeouts.WriteTotalTimeoutConstant = 0; // 書き込みエラー検出用のタイムアウト時間 if( !SetCommTimeouts( hComm, &lpCommTimeouts ) ) return;