Попытка использовать COM-компонент

#c# #.net #visual-studio #com

#c# #.net #visual-studio #com

Вопрос:

У меня есть COM-компонент. Я зарегистрировал его с помощью regsvr32 на своей 32-разрядной машине XP. Теперь, когда я пытаюсь создать экземпляр класса из него в своем КОНСОЛЬНОМ приложении, приложение просто завершает работу, не выдавая никаких исключений. Есть предложения??

Библиотека DLL COM ABCServer.dll . Код, который завершается ошибкой,

    try
   {
     ILookUp LP = new LookUp();
     ABCServer Svr = LP.LookUpServer(hostname, port);
   }
   catch(Exception ex)
   {
     Console.WriteLine(ex.message);
   }
  

Управление никогда не достигает строки 2, во время отладки, когда я нажимаю F10, находясь в строке 1, приложение просто завершается

Комментарии:

1. Вы пробовали использовать try..except ? Покажите нам какой-нибудь код, пожалуйста…

2. Стоит опубликовать код для большей ясности

3. Вы проверяли свой журнал событий на наличие каких-либо ошибок?

4. Он также «просто завершается», когда вы запускаете его в отладчике, или он действительно создает необработанное исключение?

5. @Marco он работает на C # попробуйте -execpt — это только C / C , верно?

Ответ №1:

Вероятно, COM-код abort() по какой-то причине вызывает C / C (или любой другой эквивалент на языке реализации COM DLL). И поскольку COM-сервер находится в процессе, это немедленно останавливает весь процесс.

Обратите внимание, что исключения C не могут проходить через границу COM (они должны быть явно «маршалированы» через ISupportErrorInfo ). Если исключение было вызвано в COM DLL, но не было должным образом перехвачено и обработано кодом реализации COM DLL, это могло быть причиной abort() вызова.

Если у вас есть отладочная информация для COM DLL, вы можете попробовать включить отладку неуправляемого кода (на вкладке Debug свойств проекта или с помощью кнопки «Выбрать» в диалоговом окне «Прикрепить к процессу») и перейти к собственному COM-коду, чтобы попытаться диагностировать основную проблему.