Скачал где то исходник класса для работы с COM портом, немного переписал, порт открывается, но функцией WriteFile не пишется.
Открытие порта
bool CComPort::Open(LPCTSTR port, DWORD BaudRate, byte ByteSize, byte Parity, byte StopBits){
handle = CreateFile
(
port,
GENERIC_READ | GENERIC_WRITE,
NULL,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL
);
if(handle == INVALID_HANDLE_VALUE){
return false;
};
if(!SetupComm(handle, SizeBuffer, SizeBuffer)){
return false;
};
if(!GetCommState(handle, &dcb)){
return false;
};
dcb.BaudRate = BaudRate;
dcb.fBinary = true;
dcb.fOutxCtsFlow = false;
dcb.fOutxDsrFlow = false;
dcb.fDtrControl = DTR_CONTROL_DISABLE ;
dcb.fDsrSensitivity = false;
dcb.fNull = false;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fAbortOnError = false;
dcb.ByteSize = ByteSize;
dcb.Parity = Parity;
dcb.StopBits = StopBits;
if(!SetCommState(handle, &dcb)){
return false;
};
if(!GetCommTimeouts(handle, &CommTimeOuts)){
return false;
};
CommTimeOuts.ReadIntervalTimeout = TimeoutInterval;
CommTimeOuts.ReadTotalTimeoutMultiplier = TimeoutChar;
CommTimeOuts.ReadTotalTimeoutConstant = TimeOutWait;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 0;
if(!SetCommTimeouts(handle, &CommTimeOuts)){
return false;
};
ResetRB();
ResetWB();
return true;
};
Запись в порт
unsigned short CComPort::Write(byte *buffer, unsigned short numbytes){
DWORD temp;
if(numbytes){
ClearCommError(handle, &temp, &ComState);
if((numbytes + ComState.cbOutQue)>=SizeBuffer)
MessageBox(NULL, "Íåâîçìîæíî ïîìåñòèòü â âûõîäíîé áóôåð ", "", MB_OK);
boolean result=WriteFile(handle, buffer, numbytes, &temp, &Overlap);
if(result){
return (unsigned short)temp;
};
};
return 0;
};
Возвращает 0, и количество отправленных байтов 0.
Инициализация открытия порта
if(Open("COM1", CBR_57600, DATABITS_8, EVENPARITY, ONESTOPBIT))
MessageBox(NULL, "COM1 Îòêðûò", "Îòêðûò!" , MB_OK);
else
MessageBox(NULL, "COM1 íåâîçìîæíî îòêðûòü!", "Îøèáêà!" , MB_OK);