Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как написать трукач?  (Прочитано 8517 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
kisilevski
Постоялец

ru
Offline Offline
Пол: Мужской

WWW
« : 07-05-2006 11:54 » 

Дорогие товарищи программисты, поделитесь, пожалуйста, опытом и советом по поводу ситуации.

Дано: Чужой COM объект, с которым надо дружить. Написан на Delphi. Клиент - приложение на MSVC 8.0. В клиенте вызываю метод ком-объекта, он молча отрабатывает, возвращая E_UNEXPECTED. При пошаговом выполнении в Output Window при выполнении метода появляется ругательство: First-chance exception at 0x039d727c in AdmTool.exe: 0xC0000005: Access violation reading location 0x00000050. (AdmTool.exe - это клиентское приложение). То есть где-то внутри себя он обращается (я так понял) по непроинициализированному адресу, и давит исключение в своём трукаче. В результате я не могу поймать это исключение:


Код:
  try
   {
     hr=pItem->get_Parent(&pParent); // В этом методе у ком объекта ошибка
   }
   catch (CException* e)
   {
     if(e){
      char pBuf[512];
      e->GetErrorMessage(pBuf, 512);
      MessageBoxEx(NULL, pBuf, "pItem->get_Parent", MB_OK|MB_ICONERROR, 0x419);
    }
   }

при пошаговом выполнении курсор просто перепрыгивает через блок catch, не заходя в него, то есть исключение подавляется в самом сервере. Однако, студия его видит, раз выводит ругательство. Может быть я что-то неправильно делаю?

Вопрос мой заключается в следующем: Можно ли каким-нибудь образом всё-таки получить эту строку ругательства, чтобы показать юзеру?
Записан

Ложки нет. See MSDN for details.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 07-05-2006 16:49 » 

Точно я не знаю, но можно попробовать. Похоже у тебя исключение не CException - раз он перескакивает. Попробуй написать след.

 catch (...)
   {

   }

Это перехват всех исключений в блоке.

Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
kisilevski
Постоялец

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 10-05-2006 09:05 » new

не помогло...
Обратился к авторам ДЛЛки, пусть разбираются.

Спасибо.
Записан

Ложки нет. See MSDN for details.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 10-05-2006 18:19 » 

kisilevski,

1) может исключение просто не тут выскакивает?

2) попробуй посмотреть последнюю ошибку

__try
{
}
__finally
{
    int err=GetLastError();
}
« Последнее редактирование: 10-05-2006 18:21 от Алексей1153 » Записан

kisilevski
Постоялец

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 11-05-2006 06:35 » 

И это не помогло.
Всё равно спасибо.
Записан

Ложки нет. See MSDN for details.
Anchorite
Гость
« Ответ #5 : 13-05-2006 05:32 » 

Поищи книгу

Дональд Бокс. Сущность технологии COM (Don Box. Essential COM)

Там целая глава посвящена этому вопросу.
Записан
kisilevski
Постоялец

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 13-05-2006 09:17 » 

Книжку нашёл, есть такая глава, поразбираюсь.
Записан

Ложки нет. See MSDN for details.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines