Страница 20 из 26

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

Добавлено: 17:25, 17.12.2010
ОреЛ
cilvay писал(а):На чем пишешь? на делфи?
В PluginStart пишешь:

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

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

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

form1.Close;
form1.Free;
Все. Должно работать сколько угодно и без ошибок.
Кстати если проверять на windows vista, 7 то ошибка будет гораздо подробнее описана, даже будет показан модуль с этой ошибкой
На C++. Я понял суть, что Объект должен быть Application. Спасибо за помощь.

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

Добавлено: 17:56, 17.12.2010
@serg@
cilvay писал(а):На чем пишешь? на делфи?
В PluginStart пишешь:

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

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

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

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

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

Application->CreateForm(__classid(TForm1), &Form1);

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

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

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

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

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

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

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

В принципе проблема решена, как уже ранее подсказали мне:
создание формы
Form1 = new TForm1(Application);
и высвобождение формы
Form1->Close();
Form1->Free();

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

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

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

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

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

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

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

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

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

Добавлено: 04:22, 18.12.2010
dv
cilvay писал(а):На чем пишешь? на делфи?
В PluginStart пишешь:

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

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

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

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

form1:=tform1.Create(nil); //cоздать
form1.Destroy; //удалить

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

Добавлено: 11:19, 18.12.2010
Cilvay
Да и так и так будет нормально, без разницы

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

Добавлено: 23:00, 18.12.2010
Cilvay
Уважаемые разработчики, нельзя ли сделать чтобы код, выполняющийся в функции PluginProcess был независим от чата и комфорт не ждал пока он выполниться. Если я туда запихну sleep(20000) то чат будет 20 секунд висеть. А как реализовать это без использования многопоточности?

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

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

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

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

Добавлено: 13:21, 19.12.2010
Chip
Что нужно для написания плагина?

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

Добавлено: 13:34, 19.12.2010
ОреЛ
Hunter писал(а):Что нужно для написания плагина?
1) Желание
2) Знание одного из языков программирования (желательно С++ или Delphi)
3) Наличие установленное IDE на компьютере
4) Можно начать с примеров, изложенных в этой теме, и потом продолжить разрабатывать свой плагин
Желаю удачи!

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

Добавлено: 13:39, 19.12.2010
Chip
3) Наличие установленное IDE на компьютере

А можно поподробнее? Какие программы нужны?

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

Добавлено: 13:43, 19.12.2010
ОреЛ
Hunter писал(а):3) Наличие установленное IDE на компьютере

А можно поподробнее? Какие программы нужны?
Могу привести в пример IDE 2010 года.
Microsoft Visual C++ в комплекте с Microsoft Visual Studio 2010
Embarcadero RAD Studio 2010 включает в себя C++ Builder 2010 и Delphi 2010

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

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