R. B. Krish Ответов: 3

Как не обращать внимания на это .Чистое исключение


моя проблема

Привет кодовые товарищи по проекту,
Я нахожусь в середине завершения проекта сшивания изображений. Когда я запускаю свой проект, я получаю исключение, называемое "Не Com видимый базовый класс произошел". Я знаю, что есть много решений по всему интернету на этот счет, как

"Снимите номера видимыми для COM исключение из исключения ".

Но мне не нужно такое решение, потому что я хочу доставить свой проект клиенту. Я не могу заставить их изменить настройки исключений. Так есть ли способ игнорировать исключение во время выполнения? Есть ли какой-нибудь код, чтобы остановить исключение от взлома кода?

Пожалуйста, помогите мне избавиться от этого исключения.

Что я уже пробовал:

Я попробовал что-то вроде DLLimport, которое может решить эту проблему, но это не так. Пожалуйста, объясните мне, что делать, если DLLimport действительно работает с этим........

3 Ответов

Рейтинг:
2

Jochen Arndt

Не окончательное решение, но некоторые идеи:

nonComVisibleBaseClass MDA | Microsoft Docs[^]

Цитата:
Снимите номера видимыми для COM исключение из исключения.
Это вариант против. Таким образом, вашим клиентам не нужно менять какие-либо настройки на своей стороне.

Насколько я понял, исключение (которое является диагностическим предупреждением, а не "классическим" исключением, так что его нельзя поймать) возникает только при запуске приложения из VS.

Пробовали ли вы запустить его автономно (вне VS)?


R. B. Krish

Да, когда я пытаюсь запустить его как автономный exe-файл, он не выдает никаких ошибок. Спасибо.....

Jochen Arndt

Именно этого я и ожидал.

Но на самом деле это не решает потенциально существующую проблему.

Вы можете использовать разрешение по ссылке MDA:
"Не открывайте интерфейс класса. Определите явный интерфейс и примените к нему атрибут ClassInterfaceAttribute."

R. B. Krish

Спасибо @Jochen Arndt

Рейтинг:
1

OriginalGriff

Как говорит F-ES Sitecore, поймать исключение очень просто.
Но... это очень плохая идея. Вы получаете исключение, потому что что-то не так, и процесс не может продолжаться. Перехват исключения существует для того, чтобы позволить вашему коду изящно восстановиться после проблемы, но он не решает проблему.

Я понятия не имею, что такое класс Noncom, но если он создает исключение, то все, что вы пытались с ним сделать, не сработало, и это, вероятно, означает, что ваше приложение не будет делать то, что хочет пользователь.

Вместо того чтобы пытаться игнорировать исключение, чтобы отправить код, используйте отладчик, чтобы выяснить, что вызывает проблему и почему. Доставка кода Даффа - это очень, очень хороший способ раздражать клиентов-гораздо, гораздо хуже, чем быть честным и откладывать отправку на 24 часа, пока вы ее исправляете и полностью тестируете.


F-ES Sitecore

Я думаю, что он имеет в виду "non COM", который появляется как NonCom в исключениях случая Паскаля и "Noncom" при преобразовании в случай предложения.

OriginalGriff

Вы, вероятно, правы - но это все еще не дает нам достаточно, чтобы предложить правильное решение! :смеяться:

R. B. Krish

@OriginalGriff я использую Teststack.Белый цвет для запуска приложения, чтобы оно могло автоматизировать процесс. Поэтому во время выполнения он выдает исключение non com. Даже в режиме выпуска я не могу заставить его работать без исключения.

OriginalGriff

Режим выпуска или режим отладки не отличается от исключений - если они выбрасываются, они должны быть обработаны в выпуске или производственной сборке, иначе приложение / поток закроется.

Я не знаком с Teststack.Белый, но если он запускает внешнее приложение и оно не работает, вам нужно знать, почему это приложение не работает, чтобы предотвратить проблему.

Рейтинг:
0

F-ES Sitecore

try
{
    // your code here
}
catch(Exception exp)
{
    // you can log the exception here or simply do nothing
}
finally
{
    // the finally block is optional but you can put code you want to happen here after an exception occurs if you want
}


Это ответ на ваш вопрос, но это не решит вашу проблему.


Maciej Los

Последнее утверждение доказывает, что не следует игнорировать исключения ;)

R. B. Krish

@F-ES Sitecore Привет, я не могу поймать исключение даже через блок catch. Я не знаю, как хотя бы остановить исключение. Пожалуйста, помогите мне.

Исключение говорит мне вот что.

Исключение:
Дополнительная информация: вызов queryinterface был сделан просьбой интерфейсе класса видимыми для COM управляемый класс 'ср.Внутренний.Автоматизация процессов.WindowsEditBox'. Однако, поскольку этот класс является производным от класса номера видимыми для COM-класс 'ср.Внутренний.Автоматизация процессов.ProxyHwnd', вызов QueryInterface завершится ошибкой. Это делается для того, чтобы не допустить ограничения базового класса non COM visible правилами управления версиями com.

F-ES Sitecore

Вы строите свой проект в режиме отладки? Попробуйте сделать это в режиме выпуска (в любом случае вы всегда должны отправлять релизную версию своего кода)

R. B. Krish

Да, я тоже это пробовал, но даже в режиме выпуска он все равно ломается. Вот в чем моя проблема. Я не могу справиться с этим исключением.