Пытаюсь работать с картридером через СОМ порт. WINXP,studio2003. Апаратно все работает поскольку тестовые программы работают. Однако програмно не могу доступиться.
void __cdecl _tmain(int argc, TCHAR *argv[])
{
#define COMPORT "COM1"
//LPSTR lpszDst;
HANDLE hCom;
wchar_t *ret;
char *ret1;
char buf[255];
DCB dcb;
BOOL fSuccess;
ret=_wsetlocale(LC_ALL, L".1251");
hCom=CreateFile(COMPORT, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
if (hCom == INVALID_HANDLE_VALUE)
{
sprintf(buf,"Не можу відкрити %s порт(error %d)\n",COMPORT, GetLastError());
putso(buf);
_gettch();
return;
}
fSuccess = GetCommState(hCom, &dcb);
if (!fSuccess)
{
// Handle the error.
printf ("GetCommState failed with error %d.\n", GetLastError());
CloseHandle(hCom);
return ;
}
dcb.BaudRate = CBR_9600; // set the baud rate
dcb.ByteSize = 7; // data size, xmit, and rcv
dcb.Parity = 1; // no parity bit
dcb.StopBits = ONESTOPBIT; // one stop bit
fSuccess =SetCommState(hCom, &dcb);
if (!fSuccess)
{
// Handle the error.
printf ("SetCommState failed with error %d)\n", GetLastError());
CloseHandle(hCom);
return ;
}
fSuccess= WriteFile(hCom, "123456789",9,&kilb,NULL);
if (!fSuccess)
{
// Handle the error.
sprintf (buf,"Помилка при запису в порт(error %d.\n", GetLastError());
putso(buf);
CloseHandle(hCom);
_gettch();
return ;
}
CloseHandle(hCom);
_gettch();
return ;
}
Команда WriteFile(hCom, "123456789",9,&kilb,NULL);
не проходит,выдает ошибку с номером 87 ,в чем дело ?
Добавлено форматирование — Кодт
22.09.08 18:53: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Здравствуйте, Аноним, Вы писали:
А>hCom=CreateFile(COMPORT, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
А> fSuccess= WriteFile(hCom, "123456789",9,&kilb,NULL);
А>Команда WriteFile(hCom, "123456789",9,&kilb,NULL);
А>не проходит,выдает ошибку с номером 87 ,в чем дело ?
Ты открываешь порт с флагом FILE_FLAG_OVERLAPPED, а в функции WriteFile не передаёшь указатель на инициализированную OVERLAPPED структуру.
Посмотри пример от Микрософт:
http://msdn.microsoft.com/en-us/library/ms810467.aspx
Здравствуйте, Аноним, Вы писали:
А>Пытаюсь работать с картридером через СОМ порт. WINXP,studio2003. Апаратно все работает поскольку тестовые программы работают. Однако програмно не могу доступиться.
А>Команда WriteFile(hCom, "123456789",9,&kilb,NULL);
А>не проходит,выдает ошибку с номером 87 ,в чем дело ?
Выбирай на "вкус":
Serial Communications
Здравствуйте, VVV, Вы писали:
VVV>Здравствуйте, Аноним, Вы писали:
А>>hCom=CreateFile(COMPORT, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
А>> fSuccess= WriteFile(hCom, "123456789",9,&kilb,NULL);
А>>Команда WriteFile(hCom, "123456789",9,&kilb,NULL);
А>>не проходит,выдает ошибку с номером 87 ,в чем дело ?
VVV>Ты открываешь порт с флагом FILE_FLAG_OVERLAPPED, а в функции WriteFile не передаёшь указатель на инициализированную OVERLAPPED структуру.
VVV>Посмотри пример от Микрософт:
VVV>http://msdn.microsoft.com/en-us/library/ms810467.aspx
Спасибо, все заработало.