Технология создания плагинов и программ-дополнений
-
- Администратор
- Сообщения: 6869
- Зарегистрирован: 09:56, 27.06.2005
Re: Технология создания плагинов и программ-дополнений
Это событие возникает в случае если пользователь переключил учетную запись на другую.
Re: Технология создания плагинов и программ-дополнений
Вот мне очень интересно, база плагина для C++ Builder есть (нул плагин), а вот как в нём работать с указателем на массив BYTE * bMessage не написано, может кто-нить объяснит?
Re: Технология создания плагинов и программ-дополнений
Обычный указатель на обычную память! Работать как с обычным указателем на массив байт.$teelR@t писал(а):Вот мне очень интересно, база плагина для C++ Builder есть (нул плагин), а вот как в нём работать с указателем на массив BYTE * bMessage не написано, может кто-нить объяснит?
Re: Технология создания плагинов и программ-дополнений
$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); //текст(текст объявления)
.....
Re: Технология создания плагинов и программ-дополнений
joub, спасибо за ответ, но я уже сделал более оптимизированное извлечение данных из потока через указатели.
Если Вы реально используете этот код, то лучше сделать размерность массива us[40], потому что имя пользователя не может быть больше 40 символов, а меньшее выделение памяти оптимизирует работу программы.
Если Вы реально используете этот код, то лучше сделать размерность массива us[40], потому что имя пользователя не может быть больше 40 символов, а меньшее выделение памяти оптимизирует работу программы.
Re: Технология создания плагинов и программ-дополнений
Спасибо, учту$teelR@t писал(а):joub, спасибо за ответ, но я уже сделал более оптимизированное извлечение данных из потока через указатели.
Если Вы реально используете этот код, то лучше сделать размерность массива us[40], потому что имя пользователя не может быть больше 40 символов, а меньшее выделение памяти оптимизирует работу программы.
![Smile :)](./images/smilies/icon_smile.gif)
![Smile :)](./images/smilies/icon_smile.gif)
А моя заморочка в том - что я использую самаписный класс для дальнейшей обработки, а при передаче текстового поля - не факт что строка будет заканчиваться на ноль... - лишний мусор мне там никчему )
вот кто бы еще подсказал - как при инициализации класса динамически выделять ему память(через конструктор/диструктор) - притом что переменная класса объявлена глобально...
Re: Технология создания плагинов и программ-дополнений
Извините, но пока что нет, он ещё не доработан.joub писал(а):Спасибо, учту, можно ваш пример в студию ?
Дык я тоже самописный класс используюjoub писал(а):А моя заморочка в том - что я использую самаписный класс для дальнейшей обработки, а при передаче текстового поля - не факт что строка будет заканчиваться на ноль... - лишний мусор мне там никчему )
![Wink ;)](./images/smilies/icon_wink.gif)
![Smile :)](./images/smilies/icon_smile.gif)
P.S. Шутки ради. При инициализации плагина есть переменная IsFemale (в переводе с инглиша "Девушка?") логического типа (true - да, false - нет), а эквивалентом этим словам являются true - 1, false - 0. Следовательно получается что если пользователь - девушка, то IsFemale == 1 что заведомо портит всё представление о женщинах и мужчинах(женщина должна равняться 0-ю, а мужчина 1-це) кто догадался о чём я тот молодесь)))...
Так что предлагаю переименовать переменную в нул плагине в IsMale и сделать соотв. изменения в серваке).
Re: Технология создания плагинов и программ-дополнений
Ну-ну$teelR@t писал(а):… поэтому ручками дописываем к ней 0
![Smile :)](./images/smilies/icon_smile.gif)
![Smile :)](./images/smilies/icon_smile.gif)
Re: Технология создания плагинов и программ-дополнений
Да ладно вам... ничего не затирается. Под указатель выделяется память размером с длинну текста + 1 символ. И вот этот 1 символ последний присваивается нулюDIGGER писал(а):Ну-нуВы же затираете себе же память
(А "в конце" памяти можно ещё нарваться 0x0000000C, при чём этот баг может быть плавающим)
![Wink ;)](./images/smilies/icon_wink.gif)
Re: Технология создания плагинов и программ-дополнений
Странное дело, никто не подскажет? Делал проект плагина для сервака под Delphi - под wine на линухе всё отлично запускалось. Но на C++ Builder-е как только кидаю плагин в соотв. папку сервера, то в списке плагинов в серверной проге комфорта этот плагин есть, но как только я его выбираю кнопки "О плагине" и "Настроить" остаются не активными, а при запуске плагина пишется "Ошибка при запуске плагина "test". Плагин остановлен", хотя прошлый мой проект на Delphi всё отлично работало и кнопки активные были. Попробовал на своей машине запустить(Win 7 x64) - всё тоже отлично работает, попробовал на виртуалке запустить (WinXP SP2) так само всё отлично запустилось.
Странно что проект под Delphi то запустился... Ни у кого нет никаких идей по этому поводу?
Странно что проект под Delphi то запустился... Ни у кого нет никаких идей по этому поводу?
Re: Технология создания плагинов и программ-дополнений
Проблема решена ![Smile :)](./images/smilies/icon_smile.gif)
![Smile :)](./images/smilies/icon_smile.gif)
Re: Технология создания плагинов и программ-дополнений
Из доки читаем:$teelR@t писал(а):Да ладно вам... ничего не затирается. Под указатель выделяется память размером с длинну текста + 1 символ. И вот этот 1 символ последний присваивается нулю
Где тут +1 символтекст(описание)
Текстовые данные. Представляют из себя число(длина текста в байтах) + сам текст.
![Question :?:](./images/smilies/icon_question.gif)
Re: Технология создания плагинов и программ-дополнений
Эммм, а кто говорит, что я юзаю тот же указатель, который мне передаёт сервер? Я создаю новый указатель, размечаю под него память, записываю в него текст с указателя, который мне передал сервак и добавляю в конец 0DIGGER писал(а):Где тут +1 символтекст(описание)
Текстовые данные. Представляют из себя число(длина текста в байтах) + сам текст.
![Smile :)](./images/smilies/icon_smile.gif)
Re: Технология создания плагинов и программ-дополнений
В таком случае Вы (как и joub) тратите время процессора в пустую ![Smile :)](./images/smilies/icon_smile.gif)
![Smile :)](./images/smilies/icon_smile.gif)
Re: Технология создания плагинов и программ-дополнений
Ну как сказать... Во-первых память более оптимизированно юзается, а во-вторых сравнивать собственно не с чем... Были ли бы ещё какие-либо примеры кодов, можно было бы сравнить и обсудить какой из вариантов тратит процессорное время впустую. А так как сравнивать не с чем, то процессорное время тратится так как надо данным примерам кодов.