HANDLE __stdcall comm_open(int port,LPCTSTR settings){
HANDLE comfile;
DCB dcb;
char comname[11]="\\\\.\\COM\0\0\0\0";
if(port<10){
comname[7]=port+0x30;
}else if(port<100){
comname[7]=(port/10%10)+0x30;
comname[8]=(port%10)+0x30;
}else if(port<1000){
comname[7]=(port/100%10)+0x30;
comname[8]=(port/10%10)+0x30;
comname[9]=(port%10)+0x30;
}
//忽略OVERLAPPED 参数
if(INVALID_HANDLE_VALUE==(comfile=CreateFile(comname,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL))){
return FALSE;
}
if(NULL!=settings&&GetCommState(comfile,&dcb)&&BuildCommDCB(settings,&dcb)){
dcb.fParity=1;
if(!SetCommState(comfile,&dcb)){
CloseHandle(comfile);
return FALSE;
}
}
return comfile;
}
BOOL __stdcall comm_close(HANDLE handle){
return INVALID_HANDLE_VALUE==handle?FALSE:CloseHandle(handle);
}
int __stdcall comm_read(HANDLE handle,char *buf,int bl){
DWORD rd;
if(ReadFile(handle,buf,bl,&rd,NULL)){
return rd;
}else{
return 0-GetLastError();
}
}
BOOL __stdcall comm_write(HANDLE handle,char *buf,int bl){
DWORD wr;
return WriteFile(handle,buf,bl,&wr,NULL);
}