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

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

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

Сообщение Maxim Mirgorodsky » 18:51, 09.06.2010

Это событие возникает в случае если пользователь переключил учетную запись на другую.

$teelR@t
Сообщения: 348
Зарегистрирован: 19:14, 30.03.2008
Откуда: Украина
Контактная информация:

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

Сообщение $teelR@t » 12:15, 21.06.2010

Вот мне очень интересно, база плагина для C++ Builder есть (нул плагин), а вот как в нём работать с указателем на массив BYTE * bMessage не написано, может кто-нить объяснит?

Аватара пользователя
DIGGER
Сообщения: 264
Зарегистрирован: 13:46, 15.05.2009

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

Сообщение DIGGER » 17:26, 22.06.2010

$teelR@t писал(а):Вот мне очень интересно, база плагина для C++ Builder есть (нул плагин), а вот как в нём работать с указателем на массив BYTE * bMessage не написано, может кто-нить объяснит?

Обычный указатель на обычную память! Работать как с обычным указателем на массив байт.

joub
Сообщения: 30
Зарегистрирован: 01:30, 02.04.2010

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

Сообщение joub » 12:34, 27.06.2010

$teelR@t писал(а):Вот мне очень интересно, база плагина для C++ Builder есть (нул плагин), а вот как в нём работать с указателем на массив BYTE * bMessage не написано, может кто-нить объяснит?


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

BYTE __stdcall PluginProcess(DWORD dwMessageID, BYTE * bMessage, DWORD dwMessageLength)
{
   DWORD Pe1,Pe2,Pe3,Pe4,Pe5,Pe6; // тут лежат временные переменные
   char us[255],Text[5000];

   // (Новое объявление 21)
   if(dwMessageID == 21)
   {
                                    // Разбор по косточкам
   memcpy(&Pe1,bMessage,4);               // уникальный идентификатор объявления
   memcpy(&Pe2,bMessage+4,4);               // Num User
   memset(&us,0,255);                  
   memcpy(&us,bMessage+8,Pe2);               // Имя пользователя
   memcpy(&Pe3,bMessage+8+Pe2,4);            // Num IP
   //memcpy(&ip,bMessage+12+Pe2,Pe3);         // IP-адрес пользователя
   memcpy(&Pe4,bMessage+Pe2+Pe3+12,4);         // Num Data
   //memcpy(&Date,bMessage+Pe2+Pe3+16,Pe4);   // дата и время публикации
   memcpy(&Pe5,bMessage+Pe2+Pe3+Pe4+16,4);      // Num Text
   memset(&Text,0,5000);
   memcpy(&Text,bMessage+Pe2+Pe3+Pe4+20,Pe5);   //текст(текст объявления)
.....


ps: коменты сохранены в без редактирования...)

$teelR@t
Сообщения: 348
Зарегистрирован: 19:14, 30.03.2008
Откуда: Украина
Контактная информация:

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

Сообщение $teelR@t » 12:44, 27.06.2010

joub, спасибо за ответ, но я уже сделал более оптимизированное извлечение данных из потока через указатели.
Если Вы реально используете этот код, то лучше сделать размерность массива us[40], потому что имя пользователя не может быть больше 40 символов, а меньшее выделение памяти оптимизирует работу программы.

joub
Сообщения: 30
Зарегистрирован: 01:30, 02.04.2010

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

Сообщение joub » 01:20, 28.06.2010

$teelR@t писал(а):joub, спасибо за ответ, но я уже сделал более оптимизированное извлечение данных из потока через указатели.
Если Вы реально используете этот код, то лучше сделать размерность массива us[40], потому что имя пользователя не может быть больше 40 символов, а меньшее выделение памяти оптимизирует работу программы.


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

вот кто бы еще подсказал - как при инициализации класса динамически выделять ему память(через конструктор/диструктор) - притом что переменная класса объявлена глобально...

$teelR@t
Сообщения: 348
Зарегистрирован: 19:14, 30.03.2008
Откуда: Украина
Контактная информация:

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

Сообщение $teelR@t » 13:38, 28.06.2010

joub писал(а):Спасибо, учту :) , можно ваш пример в студию ? :)

Извините, но пока что нет, он ещё не доработан.

joub писал(а):А моя заморочка в том - что я использую самаписный класс для дальнейшей обработки, а при передаче текстового поля - не факт что строка будет заканчиваться на ноль... - лишний мусор мне там никчему )

Дык я тоже самописный класс использую ;). Ну так строка и так не нулём заканчивается, поэтому ручками дописываем к ней 0 :).

P.S. Шутки ради. При инициализации плагина есть переменная IsFemale (в переводе с инглиша "Девушка?") логического типа (true - да, false - нет), а эквивалентом этим словам являются true - 1, false - 0. Следовательно получается что если пользователь - девушка, то IsFemale == 1 что заведомо портит всё представление о женщинах и мужчинах(женщина должна равняться 0-ю, а мужчина 1-це) кто догадался о чём я тот молодесь)))...
Так что предлагаю переименовать переменную в нул плагине в IsMale и сделать соотв. изменения в серваке).

Аватара пользователя
DIGGER
Сообщения: 264
Зарегистрирован: 13:46, 15.05.2009

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

Сообщение DIGGER » 04:44, 29.06.2010

$teelR@t писал(а):… поэтому ручками дописываем к ней 0 :)

Ну-ну :) Вы же затираете себе же память :) (А "в конце" памяти можно ещё нарваться 0x0000000C, при чём этот баг может быть плавающим)

$teelR@t
Сообщения: 348
Зарегистрирован: 19:14, 30.03.2008
Откуда: Украина
Контактная информация:

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

Сообщение $teelR@t » 12:01, 29.06.2010

DIGGER писал(а):Ну-ну :) Вы же затираете себе же память :) (А "в конце" памяти можно ещё нарваться 0x0000000C, при чём этот баг может быть плавающим)


Да ладно вам... ничего не затирается. Под указатель выделяется память размером с длинну текста + 1 символ. И вот этот 1 символ последний присваивается нулю ;)

$teelR@t
Сообщения: 348
Зарегистрирован: 19:14, 30.03.2008
Откуда: Украина
Контактная информация:

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

Сообщение $teelR@t » 12:40, 29.06.2010

Странное дело, никто не подскажет? Делал проект плагина для сервака под Delphi - под wine на линухе всё отлично запускалось. Но на C++ Builder-е как только кидаю плагин в соотв. папку сервера, то в списке плагинов в серверной проге комфорта этот плагин есть, но как только я его выбираю кнопки "О плагине" и "Настроить" остаются не активными, а при запуске плагина пишется "Ошибка при запуске плагина "test". Плагин остановлен", хотя прошлый мой проект на Delphi всё отлично работало и кнопки активные были. Попробовал на своей машине запустить(Win 7 x64) - всё тоже отлично работает, попробовал на виртуалке запустить (WinXP SP2) так само всё отлично запустилось.
Странно что проект под Delphi то запустился... Ни у кого нет никаких идей по этому поводу?

$teelR@t
Сообщения: 348
Зарегистрирован: 19:14, 30.03.2008
Откуда: Украина
Контактная информация:

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

Сообщение $teelR@t » 13:10, 29.06.2010

Проблема решена :)

Аватара пользователя
DIGGER
Сообщения: 264
Зарегистрирован: 13:46, 15.05.2009

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

Сообщение DIGGER » 15:33, 29.06.2010

$teelR@t писал(а):Да ладно вам... ничего не затирается. Под указатель выделяется память размером с длинну текста + 1 символ. И вот этот 1 символ последний присваивается нулю ;)


Из доки читаем:
текст(описание)
Текстовые данные. Представляют из себя число(длина текста в байтах) + сам текст.


Где тут +1 символ :?:

$teelR@t
Сообщения: 348
Зарегистрирован: 19:14, 30.03.2008
Откуда: Украина
Контактная информация:

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

Сообщение $teelR@t » 15:36, 29.06.2010

DIGGER писал(а):
текст(описание)
Текстовые данные. Представляют из себя число(длина текста в байтах) + сам текст.


Где тут +1 символ :?:

Эммм, а кто говорит, что я юзаю тот же указатель, который мне передаёт сервер? Я создаю новый указатель, размечаю под него память, записываю в него текст с указателя, который мне передал сервак и добавляю в конец 0 :)

Аватара пользователя
DIGGER
Сообщения: 264
Зарегистрирован: 13:46, 15.05.2009

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

Сообщение DIGGER » 16:22, 29.06.2010

В таком случае Вы (как и joub) тратите время процессора в пустую :)

$teelR@t
Сообщения: 348
Зарегистрирован: 19:14, 30.03.2008
Откуда: Украина
Контактная информация:

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

Сообщение $teelR@t » 16:28, 29.06.2010

Ну как сказать... Во-первых память более оптимизированно юзается, а во-вторых сравнивать собственно не с чем... Были ли бы ещё какие-либо примеры кодов, можно было бы сравнить и обсудить какой из вариантов тратит процессорное время впустую. А так как сравнивать не с чем, то процессорное время тратится так как надо данным примерам кодов.

Закрыто