#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-коду, чтобы попытаться диагностировать основную проблему.