![]() |
Модераторы: MetalFan |
![]() ![]() ![]() |
|
aleksh |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 609 Регистрация: 8.7.2008 Репутация: нет Всего: 13 |
что нужно указать у метода интерфейса add-in outlook-а, чтобы он вернул экземпляр реализованной в этом самом add-in-е коллекции?
|
|||
|
||||
cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 3 Всего: 15 |
добавь в TLB, описание интерфейса, возвращающего Enumerator.
|
|||
|
||||
aleksh |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 609 Регистрация: 8.7.2008 Репутация: нет Всего: 13 |
с enumerator-ами не знаком...
cat512, посоветуй, как лучше получить из add-in-а коллекцию контактов из адресной книги? |
|||
|
||||
cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 3 Всего: 15 |
Выложи хоть TLB, что ли. |
|||
|
||||
aleksh |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 609 Регистрация: 8.7.2008 Репутация: нет Всего: 13 |
||||
|
||||
cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 3 Всего: 15 |
Это сложно, ок, пороюсь в своих исходниках на выходных, выложу тебе какой нить примерчик
|
|||
|
||||
aleksh |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 609 Регистрация: 8.7.2008 Репутация: нет Всего: 13 |
cat512, взгляни - это add-in, вот только он чего-то не работает. не присваиваются значения outlook и namespace - можешь подсказать где ошибка?
|
|||
|
||||
cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 3 Всего: 15 |
фигня какая - то.
Есть то, что нe нужно и нет того, что нужно. Вот на это мне надо посмотреть - AddInDesignerObjects_TLB. Ты пробовал писать простенкий com-server? Если нет, то советую тебе сначала написать простенький примерчик, в котором бы использовался 1 или 2 метода, считывания/установки значений объекта. Это для того что-бы ты почувствовал, какие механизмы VCL использует для работы с COM. Просто задача за которую ты взялся - нетривиальная. Неимея определённых навыков, сложно будет получить нужный результат. Я набросал простенький примерчик использования Enumerator-а(см. аттач). Посмотри его (Не забудь зарегистр. библиотеку), затем напиши мне каким образом, твой аддин будет взаимодействовать с Outlook ( Как будет коннектиться? Будет ли создавать экземпляр Outlook-а? Знает ли что-нибудь Outlook о твоём аддине? Если знает, то какие методы используются для взаимодействия? Какие методы планируешь реализовать для экспорта данных? ) и возможно (если задача имеет решение) тогда я подскажу тебе, как это белее менее правильно сделать. Присоединённый файл ( Кол-во скачиваний: 8 ) ![]() |
|||
|
||||
aleksh |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 609 Регистрация: 8.7.2008 Репутация: нет Всего: 13 |
не спорю
навыкав нет, но результат нужен задача следуюшая - поскольку оутлук при параноидальных настройках спрашивает о доступе при каждом обращении надо написать адд-ин, который один раз получает разрешение на работу (при запуске оутлука), подключается к запущенной копии и дает возможность сторонней программе получать данные о контактах адд-ины до этого не писал, посему такае ерунда и получается буду признателен за любой совет, который поможет реализовать описанную задачу |
|||
|
||||
cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 3 Всего: 15 |
Привет, разбирался утром с твоей темой, хочу сказать что, ты в принципе мыслил в правильном напрвлении( подключил нужные описания интерфейсов и написал логичный код, поэтому забираю свои слова обратно ![]() тебе надо писать внепроцеснный ком-серверб либо использовать моникер. ![]() Это сообщение отредактировал(а) cat512 - 12.10.2010, 16:55 |
|||
|
||||
aleksh |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 609 Регистрация: 8.7.2008 Репутация: нет Всего: 13 |
проблема почти решена, в сторонней программе создаю объект адд-ина, но вот только при чтении email параноидальные настройки оутлука все же просыпаются (при обращении из длл-ки)
можно это как-то обойти? а что значит внепроцеснный и моникер? |
|||
|
||||
aleksh |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 609 Регистрация: 8.7.2008 Репутация: нет Всего: 13 |
почитал про моникеры - пока мало что понял, но это пройдет
возникает вопрос - предположим при запуске соглашаемся на запуск адд-ин-а, он получает данные из адресной книги, мы потом получаем из сторонней программы эти данные. но как быть с обновлением этих данных. моникер позволит заново выполнить метот адд-ин-а и при этом помнить что он разрешен? |
|||
|
||||
cat512 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 3 Всего: 15 |
Честно говоря не совсем понял что-за проблема с настройками, ну да ладно, объясню суть почему не подходит обычная реализация inproc(внутрипроцессного) - сервера. Дело в том что при обычной реализации внутрипроцессного сервера, ты в каждом новом процессе, использующем твой Addin, будешь использовать разделяемый образ кода dll Addina, и отдельную секцию(копию) данных для каждого процесса (если точнее то твои сом объекты создают. в куче). Если рассматривать приведённый тобой код, то получалась след. картина: При запуске оутлука, последний загружал addin в адресное пространство, создавал объект в своей секции данных, честно передавал указатель на интерфейс твоему объекту, и завершал свою инициализацию. Затем ты в своей программе, в которую хотел экспортировать данные, выполнял те же действия по загрузке addin-а и созданию объекта, но при этом, у тебя создавался новый экземпляр объекта со своими не инициализированными полями outlook, namespace и т.д.(причём первый объект был инициализирован честно). Т.е. другими, словами у тебя не шарились данные между объектами. Не знаю каким образом ты "почти решил задачу", потому как это проблема всех внутрипроцессных серверов, но если действительно решил, то буду благодарен, если расскажешь. Теперь подумаем как же можно решить проблемму шаринга данных, если она осталась актуальной. Лично я вижу два варианта: Внепроцессный (Local) exe сервер и создание Моникера. Exe - сервер, одназначно решает проблему шаринга данных. Но я не уверен, могут ли использоваться Exe - сервера в качестве аддинов для офиса. Предполагаю что могут, но это надо проверить. Моникер - это по сути указатель на реально сущ. com-объект, т.е. при использовании интерфейсов моникера, можно получить указатель на интерфейс того самого "честно инициализированного" объекта в аддресном пространстве outlooka. Но тут надо "поиграться", прежде чем получить реально работающий код.
Хороший вопрос ![]() ![]() ![]() Вообщем с этим не так страшно как кажется. Надо просто в com-сервере реализовать интерфейс IConnectionPoint, а для этого в мастере создания Automation object, включить флажок Generate Event Support code. Поддержка этого интерфейса, активирует механизм Call-back вызовов, регистрируемых клиентом на сервере. Таким образом ты можешь дёргать клиента, при обновлении данных в оутлуке Это сообщение отредактировал(а) cat512 - 12.10.2010, 23:24 |
||||
|
|||||
aleksh |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 609 Регистрация: 8.7.2008 Репутация: нет Всего: 13 |
это уже понял, поэтому "почти решенние" было банальным до не приличия - подключался к запущенному outlook-у и соответсвенно иницилизирован все что надо. но вот в чем сложность - при уже упомянутых "параноидальных" настройках outlook-а при попытке прочитать email (именно его, с остальными полями таких осложнений нет) появляется окно, в котором спрашивается разрешение на чтение этих данных, ведь работа именно этого экземпляра аддина не была разрешена (при внутренней работе аддина - когда запускается outlook дается разрешение на включения аддина и он все данные собирает без всяких разрешений) все осложняется тем, что это мой первый подход к таким задачам, в связи с этим возникают вопросы - нужно настраивать моникер (реализовывать его интерфейс) в самом аддине, или просто пробегать по таблице с поиском progid? и какие заголовочные файлы нужны для работы моникеров? cat512, напишу большое спасибо (и вообще буду крайне признателен) если выложишь простой пример работы моникера (чтобы суть уловил) и еще - при использовании моникера - при вызове методов будет дергаться запущенный экземпляр (на сколько понимаю да, но решил что лучше уточнить)? |
|||
|
||||
cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 3 Всего: 15 |
так, набросал код с Моникером, вроде работает.
Тестовый код полного сервера и клиента см. в аттаче. Этот код лучше было бы доработать для фабрики классов, что бы у нас с тобой не плодились объекты (подумай как это сделать, если не додумаешься - подскажу), а был только один глобальный DLL - синглтон. Кстати на Rsdn было несколько путёвых статей на эту тему. Обращаю внимание на вариант: когда у тебя будут запускаться несколько копий оутлука, и соответственно твоих аддинов. Подумай над этим Поскольку у меня не стоит оутлук, то я накидал работу с word-ом. там тупо возвращается количество созданных документов, я думаю с более сложными структурами ты уже разберёшься. И ещё, было бы не плохо изменить(дополнить) название темы (Ну что - то типа: Addin DLL singleton, или как - нибудь по другому), потому как некоторые люди уже спрашивали как делать подобные весчи, совсем не давно. Это сообщение отредактировал(а) cat512 - 13.10.2010, 22:57 Присоединённый файл ( Кол-во скачиваний: 5 ) ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: ActiveX/СОМ/CORBA" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |