Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Функция CERapiInit [D7, WinXP]


XGarik ©   (2005-09-15 14:08:00) 

Помогите!!! Очень срочно!!!
Для синхронизации пк с кпк использую библиотеку RAPI.DLL.
Суть проблемы в проверке состояния подключения кпк к пк. Использую функцию CERapiInit данной библиотеки, которая в случае успеха возвращает 0.

if CERapiInit=0 then
 showmessage('Устройство подключено')
else
 showmessage('Ошибка! Устройство не подключено');


Данный код работает только при подключенном устройстве, а если устройство отсоединить или выключить, то произойдет подвисание программы и происходит ожидание завершения функции... Пробовал использовать try... except (результат тот же)...

Как это обойти? Всю голову поломал, никак не могу с этим справиться (ума не хватает).
Читал MSDN и пробовал разобраться с еще 1-й функцией CERapiInitEX, но безрезультатно. Искал также в Гугле, нашел  множество примеров, но не один не работал!


XGarik   (2005-09-27 09:28:00) [1]

Народ! Все оказалось просто я использовал кривопереведенную с Си версию модуля RAPI.pas. Вот окончательная версия рабочего модуля, который проверяет подключение КПК к компу:

var
 ri : TRapiInit;
 hRes : HRESULT;
 dwRet : DWORD;
 flag: boolean;
begin
 flag:=true;
 repeat
   ri.cbSize :=  sizeof(ri);
   hRes := CeRapiInitEx(ri);
   dwRet := WaitForSingleObject(ri.heRapiInit, 5000);
   if (dwRet WAIT_OBJECT_0) OR (SUCCEEDED(ri.hrRapiInit) = FALSE) then
   begin
     CeRapiUninit;
     if Application.MessageBox('КПК не подключен!!!' + Chr(13) + 'Установите КПК в USB-кредл и нажмите ' + Chr(34) + 'Да' + Chr(34) + ' для продолжения работы или ' + Chr(34) + 'Нет' + Chr(34) + ' для отмены загрузки/выгрузки данных.','Внимание',mb_IconWarning + MB_YESNO)=IDNO then
     begin
 flag:=false;        
 Exit;
     end;  
   end;
 until ((dwRet WAIT_OBJECT_0) OR (SUCCEEDED(ri.hrRapiInit) = FALSE))=false;


Обновленная (точнее версия в которой все запохало) версия модуля RAPI.PAS:
http://www.modaco.com/index.php?act=Attach&type=post&id=8173


Tonich   (2005-09-15 15:20:00) [2]

или не пишешь для него, а лишь хочешь слить данные ?


Tonich   (2005-09-15 15:16:00) [3]

а ты на чем пишешь для кпк?


Наверх

Титульная страница Поиск, карта сайта Написать письмо