RUS  ENG 

ZuluGIS

Ошибка 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 и исправить подобные ошибки в коде.