www.map-info.ru :: Просмотр темы - GetActiveOleObject('MapInfo.Application')
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  

 
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
X-Ray



Зарегистрирован: 04.12.2009
Сообщения: 38
Откуда: Казань

СообщениеДобавлено: Пт Дек 04, 2009 2:54 am    Заголовок сообщения: GetActiveOleObject('MapInfo.Application') Добавить ответ со ссылкой на данный текст

Часть кода на Delphi:
try
oleMapInfo := GetActiveOleObject('MapInfo.Application');
except
try
oleMapInfo := CreateOleObject('MapInfo.Application');
Except
ShowMessage('MapInfo не найдено');
Exit;
end;
end;

на строке oleMapInfo := GetActiveOleObject('MapInfo.Application') выдает
cообщение об ошибке EOleSysError с сообщением "Операция недоступна".
Подскажите, пожалуйста, в чем может быть причина?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Пт Дек 04, 2009 10:19 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Мы обрабатываем так:

try
MapInfo := GetActiveOLEObject('MapInfo.Application') as DMapInfo;
except
on E : EOleSysError do begin
Application.MessageBox('ГИС MapInfo Professional не запущена.', 'Инструментарий для MapInfo', MB_OK + MB_ICONSTOP);
Exit;
end;
end;

Плюс. У вас в первую секцию except вложена следующая секция try except. Это очень неправильно с точки зрения обработки исключительных ситуаций. Нужно стараться блок except end писать крайне защищенно, чтобы там не мого возникнуть ошибки. Например, вскидывать флаг, а по выходу из секции анализировать значение флага.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
X-Ray



Зарегистрирован: 04.12.2009
Сообщения: 38
Откуда: Казань

СообщениеДобавлено: Сб Дек 05, 2009 11:58 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

всё равно такую ошибку выдает Sad
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
X-Ray



Зарегистрирован: 04.12.2009
Сообщения: 38
Откуда: Казань

СообщениеДобавлено: Пн Дек 07, 2009 6:20 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

GetActiveOLEObject для других приложений (Excel, Word) работает, а для Mapinfo не работает..
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Пн Дек 07, 2009 6:56 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

А MapInfo-то запущена??? И какая у вас MapInfo? Уверены что Professional? Или Runtime? Поищите по реестру строку "MapInfo.Application"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
X-Ray



Зарегистрирован: 04.12.2009
Сообщения: 38
Откуда: Казань

СообщениеДобавлено: Пн Дек 07, 2009 8:53 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

MapInfo запущена.
Версия MI Professional 7.5, пробывала ставить MI Professional 7.
В реестре строка 'MapInfo.Application' есть.

Проблема в том, что при неудачном завершении моего приложения в результате какой-нибудь ошибки, запущенный через Ole сеанс MI не завершается, да к тому же в нем могут быть открыты таблицы, которые в дальнейшем используются, сеанс MI скрыт, я его могу завершить, а конечные пользователи не смогут. Нужно хотя бы закрывать этот сеанс, а в идеале использовать.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
X-Ray



Зарегистрирован: 04.12.2009
Сообщения: 38
Откуда: Казань

СообщениеДобавлено: Вт Дек 08, 2009 2:40 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Проявились некоторые подробности. Когда я программно запускаю сеанс MapInfo в инвизибле и он по причине сбоя остается открытым, этот сеанс потом не удаётся подцепить с помощью GetActiveOleObject, а если на момент запуска программы есть запущенное вручную MapInfo, то его он цепляет. Вот как бы подцепить именно те сеансы, которые открыты программно и в фоне, а не те, которые открыты вручную?!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Вт Дек 08, 2009 4:17 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Кажется я догадываюсь про что вы говорите. Некое приложение создает экземпляра MapInfo через CreateOleObject (CreateComObject) и вам хочется к нему подцепиться через GetActiveOleObject. Так?
В случае с MapInfo это не пройдет. Только если первое приложение (если оно тоже ваше) не сможет передать второму приложению конкретную ссылку на IDispatch именно этого экземпляра MapInfo. Если вы случайно потеряли ссылку на экземпляр MapInfo, то уже никак кроме снятие задачи ее не снять - это общие проблемы COM в Windows.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
X-Ray



Зарегистрирован: 04.12.2009
Сообщения: 38
Откуда: Казань

СообщениеДобавлено: Вт Дек 08, 2009 4:48 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Поняли вы совершенно правильно.
Будем искать выходы.
Большое спасибо! И мой респект.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
FedorinoFF



Зарегистрирован: 01.02.2007
Сообщения: 272
Откуда: Санкт-Петербург

СообщениеДобавлено: Пт Дек 11, 2009 12:33 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Похоже надо двигаться в сторону ROT (Running Object Table). Потребность коннекта к определенной запущенной инстанции Mapinfo возникала, но руки так и не дошли...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
X-Ray



Зарегистрирован: 04.12.2009
Сообщения: 38
Откуда: Казань

СообщениеДобавлено: Пт Дек 11, 2009 1:01 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

ага, пыталась в ту степь залезть, тоже пока руки не дошли до конца довести..
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Top.Mail.Ru