Цитата(Sh@dow @ Sep 18 2010, 16:06)

Возникла необходимость использовать драйвер в visual studio 6.0. От CyAPI отказался так как она собрана так что под VS6.0 не линкуется.Пришлось работать с драйвером через DeviceIoControl.
Хм... Весьма странно... Ведь их родной пример "BulkLoop" содержит незабвенные BulkLoop.dsp и BulkLoop.dsw. А чего линкер пишет? Может ему просто какого-то флага не хватает?
Насколько помнится, я просто взял их пример "Streamer", скомпилировал, запустил, убедился, что все работает. А потом на его основе написал свою DLL-ку считывания данных (и вообще всей необходимой работы с USB). Думается, что на первом этапе стоило бы скомпилировать их собственный пример ("BulkLoop" или "Streamer"). Если это сработает, то можно пробовать локализовать проблему.
А CyAPI штука очень удобная и весьма надежная.
Цитата(uranium13 @ Sep 18 2010, 20:32)

Как вы реализуете ф-цию чтения?
я хотел бы вынести её в отдельный поток
Правильно, именно в отдельном потоке ее и следует реализовывать. Тут я поступил просто - завел глобальные переменные, которые инициализируются при старте моей DLL-ки (точнее, при вызове основной программой ее функции "Init"):
Код
CCyUSBDevice* pUSBDevice = NULL;
CCyUSBEndPoint* pControlOutEndpt = NULL;
CCyUSBEndPoint* pControlInEndpt = NULL;
CCyUSBEndPoint* pUsDataInEndpt = NULL;
CCyUSBEndPoint* pCfmDataInEndpt = NULL;
CCyUSBEndPoint* pEp1OutEndpt = NULL;
CCyUSBEndPoint* pEp1InEndpt = NULL;
А в потоке просто обращаюсь по этим указателям, например:
Код
// Queue-up the first batch of transfer requests
for (int i = 0; i < QUEUE_SIZE; i++)
contexts[i] = pUsDataInEndpt->BeginDataXfer(buffers[i], len, &inOvLap[i]);
Что касается закрытия драйвера. Я сначала попробовал сделать его закрытие (путем SAFE_DELETE(pUSBDevice);) в DllMain по приходу DLL_PROCESS_DETACH. А ни фига! Не работает. Тогда я экспортировал функцию "Close", которую вызывает моя программа при завершении работы. А USB-шный драйвер - "Штука конисская!" © :-) Не закроешь его - и привет, процесс останется висеть в системе, "без окон, без дверей ...". И убить его можно только отключением железа. Как решить эту проблему - я пока не знаю.
Еще вот тут
"CY7C680013A Киньте ссылкой на софт и лит-ру" мы обсуждали вопросы работы с CyAPI, прием данных и т.п. Думается, эту ветку было бы тоже полезно почитать.