Поставили задачу, получить на Vista Desktop приложение контакты и почту с Windows Mobile x
В общем, еще на прошлой неделе нашел простой механизм через стандартную managed библиотеку для работы с Rapi, которая идет в поставке с WinMobileDeviceCenter.
В ней есть отличный namespace который предоставляет доступ ко всем базам на КПК. Но вид их — табличный с очень кривыми связями, плюс нет возможности сразу получить почтовое сообщение целиком и взять дополнительные поля контакта.
В этом месте и возник затык.
Очень не желательно ставить на КПК дополнительные приложения, а следовательно, остается лишь использовать POOM и ActiveSync.
Вопрос1: Можно ли, каким-то образом через RAPI получить доступ к COM обекту на стороне КПК без дополнительных приложений на клиенте?
Вопрос2: Можно ли, при помощи CeRapiInvoke использовать, например, pimstore.dll (старый вариант ) чтобы дергать какие-то методы и получить, какой-то аналог необходимых объектов? Я так понял, что Rapi не использует маршалинг, т.е. я лишь могу копировать данные, но не получать ссылки, как, например, в COM или .Net Remoting?
Вопрос3: Если ответы на предыдущие вопросы — отрицательны, сориентируйте, пожайлуста, как работать с ActiveSync. Эта тема еще слабо изучена, лишь пока, что могу получать стандартный доступ к Contacts, Tasks и Inbox?
Благодарю за помощь!!
Re: Получить ссылку на объект через RAPI или ActiveSync
Пример есть и в WinMobile SDK: Windows Mobile 5.0 Pocket PC SDK\Samples\CPP\Win32\Ceinvoke\
S>Вопрос1: Можно ли, каким-то образом через RAPI получить доступ к COM обекту на стороне КПК без дополнительных приложений на клиенте?
Написать свою win32 dll с сигнатурами для RAPIInvoke (это будет что-то типа прокси-объекта). S>Вопрос2: Можно ли, при помощи CeRapiInvoke использовать, например, pimstore.dll (старый вариант ) чтобы дергать какие-то методы и получить, какой-то аналог необходимых объектов? Я так понял, что Rapi не использует маршалинг, т.е. я лишь могу копировать данные, но не получать ссылки, как, например, в COM или .Net Remoting?
Да, ссылки получать нельзя. S>Вопрос3: Если ответы на предыдущие вопросы — отрицательны, сориентируйте, пожайлуста, как работать с ActiveSync. Эта тема еще слабо изучена, лишь пока, что могу получать стандартный доступ к Contacts, Tasks и Inbox?
См. ссылки выше.
Для меня очень не желательно загружать дополнительные библиотеки на КПК.
Т.е. идеальный вариант использовать общедоступные интерфейсы.
Т.о. остается лишь вариант с ActiveSync...
Загрузил себе Windows Mobile 6 SDK. Есть большое количество примеров и хорошая документация, но все — native. Мне не очень хочется писать Cный код, т.к. уже успел потерять навыки в чистом Win Api... Времени переводить в managed, как всегда тоже нет
Господа, кто-нибудь работал с ActiveSync со стороны десктопа используя managed код? Интересует получение объектов Contacts, Tasks, Inbox.
Т.е., в идеале необходим простенький пример ActiveSync провайдера со стороны клиента (Vista) на C# или VB.
В WMDC есть 4 библиотеки, которые должны реализовывать подобные функции, и скорее всего используются самим WMDC. Но, что-то никак не могу разобраться как их использовать Документации по ним нет никакой! Возможно, кто-то тоже пытался ковырять в эту сторону и есть наработки?
S>>Вопрос3: Если ответы на предыдущие вопросы — отрицательны, сориентируйте, пожайлуста, как работать с ActiveSync. Эта тема еще слабо изучена, лишь пока, что могу получать стандартный доступ к Contacts, Tasks и Inbox? N>См. ссылки выше.
К сожалению, по ActiveSync не нашел там информации.
Здравствуйте, sysprog, Вы писали:
S>К сожалению, по ActiveSync не нашел там информации.
Если под ActiveSync имеется в виду написание провайдера, то это тебе не подойдёт. Во-первых, у любого десктопного провайдера должен быть соответствующий ему провайдер на стооне девайса. Это DLL, которая обязательно должна быть native. И написание такой DLL — ужасный геморрой.
А стандартные провайдеры использовать не получится. Они написаны для синхронизации контактов, тасков и пр. с десктопным Outlook, а не для получения этих данных программно.
Реально я знаю только 2 способа решить твоя задачу. Либо ты читаешь данные напрямую из базы через RAPI (девайсовый компонент не нужен), либо ты, опять же через RAPI, копируешь на девайс EXE либо DLL (CeCreateFile, CeWriteFile), а затем дёргаешь их с десктопа (CeCreateProcess или CeRapiInvoke соответственно). Оба способа должны быть доступны из managed-кода.
--
Я думал, ты огромный страшный Бажище,
А ты недоучка, крохотный Бажик...
Re[4]: Получить ссылку на объект через RAPI или ActiveSync
AS> затем дёргаешь их с десктопа (CeCreateProcess или CeRapiInvoke соответственно). Оба способа должны быть доступны из managed-кода.
Интересно, может есть какие-то способы из managed-кода работать с IRAPIStream на десктопе? Кроме как создать native-обертку и потом уже ее использовать в managed коде...
Здравствуйте, Nikolkos, Вы писали:
AS>> затем дёргаешь их с десктопа (CeCreateProcess или CeRapiInvoke соответственно). Оба способа должны быть доступны из managed-кода.
N>Интересно, может есть какие-то способы из managed-кода работать с IRAPIStream на десктопе? Кроме как создать native-обертку и потом уже ее использовать в managed коде...
Честно говоря, не знаю — в .NET я не большой специалист. Второй из упомянутых мною способов в случае managed надо делать через EXE. Так как DLL для CeRapiInvoke на managed в любом случае не напишешь.
--
Я думал, ты огромный страшный Бажище,
А ты недоучка, крохотный Бажик...
Re[6]: Получить ссылку на объект через RAPI или ActiveSync
Здравствуйте, Alexander Shargin, Вы писали:
AS>Честно говоря, не знаю — в .NET я не большой специалист. Второй из упомянутых мною способов в случае managed надо делать через EXE. Так как DLL для CeRapiInvoke на managed в любом случае не напишешь.
Господа, благодарю за комментарии!! Вчера остановился все же на создании своего Sync Service Providera для ActiveSync. Там есть такой метод
В hFolder передается имя папки, т.о., надеюсь, что если укажу там Mail или Contacts, то получу то что мне нужно!.. Понравилось, что ActiveSync делает за меня большую часть работы и по хранению изменней и вызов методов... В общем, чистый COM. Пришлось учить ATL, что было лень сделать раньше...
Если так не получится, тогда следующим шагом попробую создать аналогичный COM на КПК для работы с POOM.
Если этот вариант окажется неприемлемым, тогда уже буду через RAPI работать...
Nikolkos, спасибо за одну из ссылок, все таки нашел там пример детальный по созданию SSP SSP for ActiveSync
Всех благодарю за помощь, позже отпишусь о результатах!