Технология создания плагинов и программ-дополнений

Здесь обсуждаются графические оболочки, боты, языковые файлы и другие дополнения к CommFort 4.
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

Re: Технология создания плагинов и программ-дополнений

Сообщение Maxim Mirgorodsky »

DIGGER писал(а):понятно. спасибо. А как узнать подробнее что за исключение?

В текущей версии никак. Просто проверьте содержимое этой функции.
DIGGER писал(а):Вопрос: большую часть кода я могу перенести с PluginInit в DLL_PROCESS_ATTACH, если ошибка в моём коде, то чат тогда будет падать? или показывать более подробную ошибку?
Не стоит, потому что получается что этот код будет выполняться даже если плагин деактивирован.
DIGGER писал(а):У Вас плагин заработал?
Не запускали.
DIGGER писал(а):И ещё (только сообразил): PluginInit вызывается когда пользователь НАЖИМАЕТ кнопку "Запустить"? или нет?
Еще в случае запуска программы (если плагин активирован).
DIGGER писал(а):Даже если процедуру PluginInit ВООБЩЕ убрать, то кнопки "Настройка" и "О плагине" ДОЖНЫ работать?
Да. Но другие функции без PluginInit работать не будут.
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

Re: Технология создания плагинов и программ-дополнений

Сообщение Maxim Mirgorodsky »

VIRUS писал(а):Если можно добавьте данную команду и ID 15 для функции CommFortGetData.
Возможно добавим в одной из следующих версий.
Аватара пользователя
DIGGER
Сообщения: 264
Зарегистрирован: 13:46, 15.05.2009

Re: Технология создания плагинов и программ-дополнений

Сообщение DIGGER »

Maxim Mirgorodsky,
Q:Даже если процедуру PluginInit ВООБЩЕ убрать, то кнопки "Настройка" и "О плагине" ДОЖНЫ работать?
A:Да. Но другие функции без PluginInit работать не будут.
Вот! А у людей (тех у которых плагин вообще не запускается) они не подсвечиваются! Извечный вопрос: куда копать?
P.S. Сам лично не смог сделать с WinXP и Win7 ничего такого что бы плагин на нём не запускался…

Maxim Mirgorodsky, пожалуйста, попробуйте поставить себе плагин и только посмотреть включены ли у Вас кнопки "Настройка" и "О плагине". т.е. даже не надо запускать плагин — так Вы ничем не рискуете.
Аватара пользователя
supermet
Сообщения: 245
Зарегистрирован: 02:35, 19.07.2009

Re: Технология создания плагинов и программ-дополнений

Сообщение supermet »

Откомпилировал исходники примера плагина для клиента на OpenWatcom 1.8. Тот же результат, что и с Mingw (GCC 4.4.0) -- после нажатия на кнопку запуска плагина ничего не происходит. Плагин заработал только в С++ Builder 2009. Мне нужно чтоб работал на бесплатном компиляторе.
Может нужно что-то дополнительно инициализировать после "case DLL_PROCESS_ATTACH:" в главной функции?
Последний раз редактировалось supermet 13:48, 16.08.2009, всего редактировалось 1 раз.
Аватара пользователя
DIGGER
Сообщения: 264
Зарегистрирован: 13:46, 15.05.2009

Re: Технология создания плагинов и программ-дополнений

Сообщение DIGGER »

supermet писал(а):…после нажатия на кнопку запуска плагина ничего не происходит.…
ну напишите в PluginInit функцию MessageBox() и увидите что что-то всё таки происходит Изображение
Аватара пользователя
VIRUS
Сообщения: 174
Зарегистрирован: 13:15, 23.11.2008

Re: Технология создания плагинов и программ-дополнений

Сообщение VIRUS »

demon9992 писал(а):Как можно создать процедуру таймера в плагине ? Вообще возможно это ?
Конечно возможно, я например в плагине "Каркас" таймер использовал. Нужно создать объект класса TTimer и рабоать с ним.
Пользователь думает, что в килобайте 1000 байт, а программист думает, что в километре 1024 метра.
Аватара пользователя
supermet
Сообщения: 245
Зарегистрирован: 02:35, 19.07.2009

Re: Технология создания плагинов и программ-дополнений

Сообщение supermet »

ну напишите в PluginInit функцию MessageBox() и увидите что что-то всё таки происходит
Да, происходит. Сообщения выводятся нормально. А толку нет от этого.
Аватара пользователя
DIGGER
Сообщения: 264
Зарегистрирован: 13:46, 15.05.2009

Re: Технология создания плагинов и программ-дополнений

Сообщение DIGGER »

supermet, что значит нет толку? Бери пиши, то что тебе нужно, и будет работать! Что тебя не устраивает?
Аватара пользователя
supermet
Сообщения: 245
Зарегистрирован: 02:35, 19.07.2009

Re: Технология создания плагинов и программ-дополнений

Сообщение supermet »

DIGGER, ты меня не понял. Кнопка "запустить" остается включенной, а кнопка "остановить" не активируется. Т.е. плагин не работает.
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

Re: Технология создания плагинов и программ-дополнений

Сообщение Maxim Mirgorodsky »

supermet писал(а):DIGGER, ты меня не понял. Кнопка "запустить" остается включенной, а кнопка "остановить" не активируется. Т.е. плагин не работает.
1) Убедитесь, что Вы верно заполняете структуру информации о плагине, в особенности строку strPluginVersion (версия программы, для которой предназначен плагин).
2) Убедитесь, что Вы используете соглашение __stdcall.
3) Убедитесь, что отключено декорирование имен функций.
4) Убедитесь, что код функции PluginInit не содержит ошибок. Для проверки лучше ограничить содержимое этой функции лишь самым необходимым (заполнением структуры информации о плагине и сохранением идентификатора и адресов функций программы).

Проблема в одном из 4х этих условий - это можно говорить с вероятностью практически 100%.
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

Re: Технология создания плагинов и программ-дополнений

Сообщение Maxim Mirgorodsky »

DIGGER писал(а):Вот! А у людей (тех у которых плагин вообще не запускается) они не подсвечиваются! Извечный вопрос: куда копать?
P.S. Сам лично не смог сделать с WinXP и Win7 ничего такого что бы плагин на нём не запускался…

Maxim Mirgorodsky, пожалуйста, попробуйте поставить себе плагин и только посмотреть включены ли у Вас кнопки "Настройка" и "О плагине". т.е. даже не надо запускать плагин — так Вы ничем не рискуете.
То есть у части пользователей подсвечиваются эти кнопки, а у части не подсвечиваются?
Аватара пользователя
Maicra Ice
Сообщения: 36
Зарегистрирован: 16:27, 16.04.2008
Откуда: г.Вязьма БРЯНКА
Контактная информация:

Re: Технология создания плагинов и программ-дополнений

Сообщение Maicra Ice »

Ссори может не в той теме пишу,какая прога нужна для установки плагинов??и как эти сами плагины устанавливать?просто счас пользуюсь ботами,решил попробывать плагины
•NormaBot•
Сообщения: 1428
Зарегистрирован: 20:57, 21.10.2008
Откуда: Украина.Херсон
Контактная информация:

Re: Технология создания плагинов и программ-дополнений

Сообщение •NormaBot• »

Maicra Ice писал(а):Ссори может не в той теме пишу,какая прога нужна для установки плагинов??и как эти сами плагины устанавливать?просто счас пользуюсь ботами,решил попробывать плагины
Чтобы пользоваться плагинами не нужна никакая програма.Просто нужно в папке клиента создать папку "Plugins" (если она ещё небыла создана ранее )и естественно поместить туда нужные плагины.Потом в опциях клиента нужно выбрать раздел "плагины" и после их запустить а также настроить. :D
Аватара пользователя
DIGGER
Сообщения: 264
Зарегистрирован: 13:46, 15.05.2009

Re: Технология создания плагинов и программ-дополнений

Сообщение DIGGER »

Maxim Mirgorodsky писал(а):То есть у части пользователей подсвечиваются эти кнопки, а у части не подсвечиваются?
Совершенно верно! Это я Вам и пытался пояснить! Вот тут я нашёл способ выяснить что ошибка в плагине (дальше люди отписывались)

Сейчас проблему решил изменив опции компиляции, но это не выход! (как по мне)
Аватара пользователя
supermet
Сообщения: 245
Зарегистрирован: 02:35, 19.07.2009

Re: Технология создания плагинов и программ-дополнений

Сообщение supermet »

Конечно возможно, я например в плагине "Каркас" таймер использовал. Нужно создать объект класса TTimer и рабоать с ним.
Дельфийский и Билдеровский таймер не работает без формы.
Если в плагине нет объекта TFORM, то его нужно создавать так:

Код: Выделить всё

type
  TMethodPointer = packed record
    pMethod: Pointer;
    pObject: TObject;
  end;
  PMethodPointer = ^TMethodPointer;

  var
  Timer1: TTimer;
  pointer1: TMethodPointer;

...
procedure ontimer1(Self: TMethodPointer; Sender: TObject);
begin
// код таймера
end;

...
Timer1 := TTimer.Create(nil);
Timer1.Interval := 10000;
pointer1.pMethod := @ontimer1;
pointer1.pObject := nil;
Timer1.OnTimer := TNotifyEvent(pointer1);
Timer1.Enabled := True;
Последний раз редактировалось supermet 14:03, 16.08.2009, всего редактировалось 1 раз.
Закрыто