Ошибка
Delphi 6 при импорте библиотеки типов При использовании компонентов Zulu 5.0 ActiveX Control Module и объектов Zulu
5.0 Library в приложениях, написанных на Borland Delphi 6 возникают сбои типа
«access violation» (попросту «вылет»). Причиной тому стала неправильная
работа Delphi 6 при импорте библиотеки типов. Ошибка в методах-оболочках
(wrappers) При импорте ActiveX элементов Zulu в какой-либо пакет (package),
Delphi генерирует вместе с другими файлами модули (unit) ZuluOCX_TLB.pas и ZuluLib.pas,
в которые помещаются объявления объектов и их свойств и методов на языке Delphi.
Для доступа в свойствам и методам элемента ActiveX Delphi генерирует метод-оболочку
(wrapper) у соответствующего объекта Delphi. И вот в этом случае Delphi 6 код
формирует не всегда правильно.
Ниже приведен пример метода-оболочки для метода GetDrawHandle элемента MapCtrl
такой, каким его формирует Delpi 6 и такой, какой он должен быть: //Код Delphi 6:
function TMapCtrl.GetDrawHandle: Integer;
begin
DefaultInterface.GetDrawHandle;
end;//Правильный код:
function TMapCtrl.GetDrawHandle: Integer;
begin
Result := DefaultInterface.GetDrawHandle;
end; Как видно из примера, в коде Delphi 6 нет присвоения Result'у собственно возвращаемого значения метода, что приводит к тому, что значение метода GetDrawHandle оказывается неинициалицированным, что в целом приводит к непредсказуемому результату.
Данная проблема возникает не только c компонентами Zulu, но и при использовании компонент других фирм (например ESRI MapObjects). Однако подобное поведение отмечено только в 6-й версии Delphi. Решение проблемы Необходимо вручную проверить код, сгенерированный Delphi и исправить подобные ошибки в коде. |