Я сделал два активных компонента в Delphi XE2 в отдельных проектах. Один из компонентов работает отлично, и каждое исключение, которое он бросает, маскируется как EOleException. На другом компоненте activex исключения не замаскированы, они выбрасываются как их исходный тип. Клиент - это программа delphi XE.ActiveX не поднимает EOleException
Когда компонент activex генерирует исходное исключение, следующий вызов любого другого метода из компонента вызывает исключение нарушения доступа в местах, где он не должен, например, установка локальной строковой переменной со значением. Это очень странное поведение.
Я сравнивал оба проекта .ridl-файл, компилируя опции, .dproj-файл и не смог найти виновника.
Кто-нибудь знает причину этой разницы/странного поведения?
благодаря
Edit: Некоторый код
Компонент 1, который работает (маски все исключения в EOleException)
TspdMyClassX = class(TActiveXComponent, MyInterface)
...
initialization
TActiveXComponentFactory.Create(
ComServer,
TspdMyClassX,
CLASS_spdMyClassX,
1,
'',
0,
tmBoth);
Другой компонент, которые делают не выбрасывать EOleException имеют другой интерфейс, но остальная часть кода такая же (инициализация, родительский класс TActiveXComponent)
Пожалуйста, покажите фактический код. –
Вы сравнили порядок единиц, включенных в предложение 'uses'. Если два включенных файла обрабатывают исключения, то, возможно, он использует код из разных блоков между двумя проектами. Он использует код, который он находит первым, начиная с последнего блока в предложении 'uses' и отступая от него назад. –
Я выяснил, что если я определяю метод, который не принимает никаких параметров и не имеет возвращаемого значения, компонент маскирует исключения, сгенерированные внутри метода с помощью EOleException. Когда метод имеет возвращаемое значение или параметр, исключение не маскируется. Я делаю тот же проект на delphi 7 из нуля, чтобы узнать, является ли это некоторой ошибкой, связанной с delphi xe2. –