Архив: Технология создания плагинов

Здесь обсуждаются технические аспекты создания дополнений.
ОреЛ
Сообщения: 376
Зарегистрирован: 11:18, 11.07.2008
Откуда: Ульяновск
Контактная информация:

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

Сообщение ОреЛ »

cilvay писал(а):На чем пишешь? на делфи?
В PluginStart пишешь:

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

Form1 := TForm1.Create(Application);
Form1.Show;
Теперь внимание на PluginStop

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

form1.Close;
form1.Free;
Все. Должно работать сколько угодно и без ошибок.
Кстати если проверять на windows vista, 7 то ошибка будет гораздо подробнее описана, даже будет показан модуль с этой ошибкой
На C++. Я понял суть, что Объект должен быть Application. Спасибо за помощь.
Когда пишете программу, всегда думайте о том, что её может затем поддерживать психопат и насильник, который знает где вы живёте.
— Martin Golding
@serg@
Сообщения: 702
Зарегистрирован: 14:50, 20.07.2009

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

Сообщение @serg@ »

cilvay писал(а):На чем пишешь? на делфи?
В PluginStart пишешь:

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

Form1 := TForm1.Create(Application);
Form1.Show;
Теперь внимание на PluginStop

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

form1.Close;
form1.Free;
Все. Должно работать сколько угодно и без ошибок.
Кстати если проверять на windows vista, 7 то ошибка будет гораздо подробнее описана, даже будет показан модуль с этой ошибкой
До этого как-то наталкивался, сейчас найти не получилось, Free() вызывает набор функций, разве Close() он сам не вызывает, или скорее всего я ошибаюсь?
впринципе на с++ тоже самое нужно только синтаксис создания другой.

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

Application->CreateForm(__classid(TForm1), &Form1);
KGB
Сообщения: 659
Зарегистрирован: 08:54, 13.07.2010
Откуда: Чебоксары, Россия
Контактная информация:

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

Сообщение KGB »

ОреЛ писал(а): форма создается в отдельном классе, а при вызове функции PluginStop вызывается деструктор этого класса
и, когда при закрытии (в деструкторе) написано Form1->Free() , то, когда два раза подряд включается-выключается плагин, на 3-ий раз при включении подвисает сервер
В деструкторе проверяется, была ли создана форма? Сервер подвисает, когда включается-выключается плагин без формы?
ОреЛ
Сообщения: 376
Зарегистрирован: 11:18, 11.07.2008
Откуда: Ульяновск
Контактная информация:

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

Сообщение ОреЛ »

KGB писал(а):В деструкторе проверяется, была ли создана форма? Сервер подвисает, когда включается-выключается плагин без формы?
В конструкторе создается форма.
В деструкторе проверки на наличие формы нет.
Когда 3-ий раз нажимал на кнопку Запустить, то подвисал сервер с нажатой кнопкой Запустить.

@serg@ писал(а): До этого как-то наталкивался, сейчас найти не получилось, Free() вызывает набор функций, разве Close() он сам не вызывает, или скорее всего я ошибаюсь?
впринципе на с++ тоже самое нужно только синтаксис создания другой.

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

Application->CreateForm(__classid(TForm1), &Form1);
Если так создавать форму, то при выключении плагина сервер вылетает полностью. Просто закрывается.

В принципе проблема решена, как уже ранее подсказали мне:
создание формы
Form1 = new TForm1(Application);
и высвобождение формы
Form1->Close();
Form1->Free();
Когда пишете программу, всегда думайте о том, что её может затем поддерживать психопат и насильник, который знает где вы живёте.
— Martin Golding
KGB
Сообщения: 659
Зарегистрирован: 08:54, 13.07.2010
Откуда: Чебоксары, Россия
Контактная информация:

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

Сообщение KGB »

ОреЛ писал(а): В конструкторе создает форма.
В деструкторе проверки на наличие формы нет.
Когда 3-ий раз нажимал на кнопку Запустить, то подвисал сервер с нажатой кнопкой Запустить.
Т.е. деструктор не может быть вызван, когда формы нет в памяти? Тогда вопрос снят, неправильно понял)
@serg@
Сообщения: 702
Зарегистрирован: 14:50, 20.07.2009

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

Сообщение @serg@ »

ОреЛ писал(а):
KGB писал(а):
ОреЛ писал(а): форма создается в отдельном классе, а при вызове функции PluginStop вызывается деструктор этого класса
и, когда при закрытии (в деструкторе) написано Form1->Free() , то, когда два раза подряд включается-выключается плагин, на 3-ий раз при включении подвисает сервер
В деструкторе проверяется, была ли создана форма? Сервер подвисает, когда включается-выключается плагин без формы?
В конструкторе создается форма.
В деструкторе проверки на наличие формы нет.
Когда 3-ий раз нажимал на кнопку Запустить, то подвисал сервер с нажатой кнопкой Запустить.

@serg@ писал(а): До этого как-то наталкивался, сейчас найти не получилось, Free() вызывает набор функций, разве Close() он сам не вызывает, или скорее всего я ошибаюсь?
впринципе на с++ тоже самое нужно только синтаксис создания другой.

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

Application->CreateForm(__classid(TForm1), &Form1);
Если так создавать форму, то при выключении плагина сервер вылетает полностью. Просто закрывается.

В принципе проблема решена, как уже ранее подсказали мне:
создание формы
Form1 = new TForm1(Application);
и высвобождение формы
Form1->Close();
Form1->Free();
Не спорю, у самого есть ошибка при завершении работы плагина, правда она ни к чему не приводит, сейчас туго вспоминается, возможно при моём варианте создания формы, метод Close() какраз и приводил к остановке базовой программы поэтому у себя я и не нахожу его. Как-нибудь на досуге попробую по твоему методу создать форму.
Аватара пользователя
dv
Сообщения: 1845
Зарегистрирован: 10:28, 11.05.2007
Откуда: Краснодар

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

Сообщение dv »

cilvay писал(а):На чем пишешь? на делфи?
В PluginStart пишешь:

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

Form1 := TForm1.Create(Application);
Form1.Show;
Теперь внимание на PluginStop

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

form1.Close;
form1.Free;
Все. Должно работать сколько угодно и без ошибок.
Кстати если проверять на windows vista, 7 то ошибка будет гораздо подробнее описана, даже будет показан модуль с этой ошибкой

form1:=tform1.Create(nil); //cоздать
form1.Destroy; //удалить
Дополнения для CommFort
Адрес чата: chat.telered.ru




.
Cilvay
Сообщения: 816
Зарегистрирован: 14:55, 16.06.2008

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

Сообщение Cilvay »

Да и так и так будет нормально, без разницы
Cilvay
Сообщения: 816
Зарегистрирован: 14:55, 16.06.2008

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

Сообщение Cilvay »

Уважаемые разработчики, нельзя ли сделать чтобы код, выполняющийся в функции PluginProcess был независим от чата и комфорт не ждал пока он выполниться. Если я туда запихну sleep(20000) то чат будет 20 секунд висеть. А как реализовать это без использования многопоточности?
@serg@
Сообщения: 702
Зарегистрирован: 14:50, 20.07.2009

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

Сообщение @serg@ »

ОреЛ писал(а):Если так создавать форму, то при выключении плагина сервер вылетает полностью. Просто закрывается.

В принципе проблема решена, как уже ранее подсказали мне:
создание формы
Form1 = new TForm1(Application);
и высвобождение формы
Form1->Close();
Form1->Free();
Перепроверил твой метод, в нём при создании объекта Form сразу вылетает ошибка памяти, может ещё нужны какие-либо манипуляции с формой, проверять нет времени.
По моему методу: у меня полностью запрещён метод Close(), именно он уничтожает родительский объект Application, выключение плагина идёт вызовом события 2100, который как раз и вызывает функцию в котором форма со всеми её компонентами уничтожается методом Free().
Chip
Сообщения: 184
Зарегистрирован: 17:31, 19.10.2010
Контактная информация:

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

Сообщение Chip »

Что нужно для написания плагина?
ОреЛ
Сообщения: 376
Зарегистрирован: 11:18, 11.07.2008
Откуда: Ульяновск
Контактная информация:

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

Сообщение ОреЛ »

Hunter писал(а):Что нужно для написания плагина?
1) Желание
2) Знание одного из языков программирования (желательно С++ или Delphi)
3) Наличие установленное IDE на компьютере
4) Можно начать с примеров, изложенных в этой теме, и потом продолжить разрабатывать свой плагин
Желаю удачи!
Когда пишете программу, всегда думайте о том, что её может затем поддерживать психопат и насильник, который знает где вы живёте.
— Martin Golding
Chip
Сообщения: 184
Зарегистрирован: 17:31, 19.10.2010
Контактная информация:

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

Сообщение Chip »

3) Наличие установленное IDE на компьютере

А можно поподробнее? Какие программы нужны?
ОреЛ
Сообщения: 376
Зарегистрирован: 11:18, 11.07.2008
Откуда: Ульяновск
Контактная информация:

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

Сообщение ОреЛ »

Hunter писал(а):3) Наличие установленное IDE на компьютере

А можно поподробнее? Какие программы нужны?
Могу привести в пример IDE 2010 года.
Microsoft Visual C++ в комплекте с Microsoft Visual Studio 2010
Embarcadero RAD Studio 2010 включает в себя C++ Builder 2010 и Delphi 2010
Когда пишете программу, всегда думайте о том, что её может затем поддерживать психопат и насильник, который знает где вы живёте.
— Martin Golding
Chip
Сообщения: 184
Зарегистрирован: 17:31, 19.10.2010
Контактная информация:

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

Сообщение Chip »

ОреЛ писал(а):Могу привести в пример IDE 2010 года.
Microsoft Visual C++ в комплекте с Microsoft Visual Studio 2010
Embarcadero RAD Studio 2010 включает в себя C++ Builder 2010 и Delphi 2010
Спасибо
Закрыто