ГИС Zulu Теплоснабжение Водоснабжение Энергосбыт Download карта сайта  
Документация
Уголок разработчика
История изменений
Статьи и советы
Форум
О компании
Контакты
Наши пользователи
ГИС Zulu
ZuluXTools
ZuluThermo
ZuluHydro
Энергосбыт
Источник
Download
Демо-версии
Документация
Сертификаты
Цены
Форум
Статьи
ВУЗам

 

 

 

 

 

 

 

 

ГИС Zulu / Уголок разработчика / Ошибка Delphi 6 при импорте библиотеки типов

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

 

Последнее обновление:
05.05.2012 09:59:59
©1999-2004, Политерм ООО
webmaster@politerm.com.ru
191123, Санкт-Петербург, а/я 349
т./ф. (812)279-6780, (812)275-7721
e-mail:politerm@politerm.com.ru