Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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 писать крайне защищенно, чтобы там не мого возникнуть ошибки. Например, вскидывать флаг, а по выходу из секции анализировать значение флага. |
|
Вернуться к началу |
|
|
X-Ray
Зарегистрирован: 04.12.2009 Сообщения: 38 Откуда: Казань
|
Добавлено: Сб Дек 05, 2009 11:58 pm Заголовок сообщения: |
|
|
всё равно такую ошибку выдает |
|
Вернуться к началу |
|
|
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" |
|
Вернуться к началу |
|
|
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. |
|
Вернуться к началу |
|
|
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 Заголовок сообщения: |
|
|
ага, пыталась в ту степь залезть, тоже пока руки не дошли до конца довести.. |
|
Вернуться к началу |
|
|
|