Сообщество LeaderTask

Ресурсы => Плагины => Разработка плагинов / Обсуждение API => Тема начата: Дмитрий Маслов от 26 Мая 2010, 09:08:26

Название: Разработка плагинов - основные ошибки
Отправлено: Дмитрий Маслов от 26 Мая 2010, 09:08:26
При разработке плагинов к LeaderTask, разработчики допускают всяческие неточности при взаимодействии с LeaderTask API.
В этой теме будут выкладываться типичные ошибки.
Название: Re: Разработка плагинов - основные ошибки
Отправлено: Дмитрий Маслов от 26 Мая 2010, 09:19:31
1. Используйте юникод!

Игнорирование того, что параметры должны поступать в юникоде - двухбайтной кодировке, типичной для функций Windows API (wchar_t) - приводит к ошибкам.
Передача строковых параметров в ansi (однобайтной кодировке) в лучшем случае воспримется программой как китайский язык, в общем случае приводит либо к падению программы, либо неопределенному поведению.
Это касается всех функций, в том числе и AddinLT_Task_SetRTFComment
Название: Re: Разработка плагинов - основные ошибки
Отправлено: Дмитрий Маслов от 03 Июня 2010, 12:15:58
2. Следите за зависимостями от сторонних DLL

На компьютере пользователя могут отсутствовать необходимые для работы Вашего плагина DLL - тогда Ваш плагин просто у пользователя не загрузится (без всяких ошибок).
Самое распространенное здесь это отсутствие Debug библиотек у пользователя, по этому выкладывайте плагины всегда в Release сборке.
Название: Re: Разработка плагинов - основные ошибки
Отправлено: Hush от 08 Августа 2010, 13:52:14
3. Для Delphi нужно указать модель вызова функции "cdecl"
Пример:
function AddinLT_Task_GetTitle(id:PWideChar):PWideChar; cdecl; external 'lt_plugins.dll' name 'AddinLT_Task_GetTitle';
Название: Re: Разработка плагинов - основные ошибки
Отправлено: Дмитрий Маслов от 23 Августа 2010, 12:05:56
4. Запускайте функции LeaderTask API (AddinLT_...) в основном потоке

На текущий момент работа плагинов не предназначена для многопоточного режима, по этому вызов функций LeaderTask API из потоков созданных внутри плагина может приводить к зависанию, вылетанию программы или зацикливанию.
В следующих версиях все функцию будут возвращать FALSE если вызваны не в том потоке.
Название: Re: Разработка плагинов - основные ошибки
Отправлено: NA от 01 Ноября 2010, 18:54:42
Для Delphi я бы отметил как минимум 3 важных момента:

1. Как уже указано выше - cdecl, обязательно.
2. {$Z4} - просто скажите спасибо, поставьте в начало шаблона и забудьте о ней навсегда.
3. Грабля, которая чуть не выела мне весь мозг. При переводе API на Pascal пропарил указать в одном из многочисленных объявлений var.
Название: Re: Разработка плагинов - основные ошибки
Отправлено: Hush от 07 Декабря 2010, 04:12:00
При экспорте ф-ий из dll для Delphi будьте внимательны - сишный тип BOOL соответствует типу BOOL в Delphi, а не привычному в Delphi типу Boolean. Но можно указать BOOL в экспорте функциии, а передавать туда Boolean, Delphi автоматически сделает приведение типов. Подробнее о разнице в этих типах можно прочитать здесь  (http://www.transl-gunsmoker.ru/2009/04/bool-boolean-integer.html)