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

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

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

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

Это событие возникает в случае если пользователь переключил учетную запись на другую.
$teelR@t
Сообщения: 348
Зарегистрирован: 19:14, 30.03.2008
Откуда: Украина
Контактная информация:

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

Сообщение $teelR@t »

Вот мне очень интересно, база плагина для C++ Builder есть (нул плагин), а вот как в нём работать с указателем на массив BYTE * bMessage не написано, может кто-нить объяснит?
Аватара пользователя
DIGGER
Сообщения: 264
Зарегистрирован: 13:46, 15.05.2009

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

Сообщение DIGGER »

$teelR@t писал(а):Вот мне очень интересно, база плагина для C++ Builder есть (нул плагин), а вот как в нём работать с указателем на массив BYTE * bMessage не написано, может кто-нить объяснит?
Обычный указатель на обычную память! Работать как с обычным указателем на массив байт.
joub
Сообщения: 30
Зарегистрирован: 01:30, 02.04.2010

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

Сообщение joub »

$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 »

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

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

Сообщение joub »

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

вот кто бы еще подсказал - как при инициализации класса динамически выделять ему память(через конструктор/диструктор) - притом что переменная класса объявлена глобально...
$teelR@t
Сообщения: 348
Зарегистрирован: 19:14, 30.03.2008
Откуда: Украина
Контактная информация:

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

Сообщение $teelR@t »

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 »

$teelR@t писал(а):… поэтому ручками дописываем к ней 0 :)
Ну-ну :) Вы же затираете себе же память :) (А "в конце" памяти можно ещё нарваться 0x0000000C, при чём этот баг может быть плавающим)
$teelR@t
Сообщения: 348
Зарегистрирован: 19:14, 30.03.2008
Откуда: Украина
Контактная информация:

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

Сообщение $teelR@t »

DIGGER писал(а):Ну-ну :) Вы же затираете себе же память :) (А "в конце" памяти можно ещё нарваться 0x0000000C, при чём этот баг может быть плавающим)
Да ладно вам... ничего не затирается. Под указатель выделяется память размером с длинну текста + 1 символ. И вот этот 1 символ последний присваивается нулю ;)
$teelR@t
Сообщения: 348
Зарегистрирован: 19:14, 30.03.2008
Откуда: Украина
Контактная информация:

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

Сообщение $teelR@t »

Странное дело, никто не подскажет? Делал проект плагина для сервака под Delphi - под wine на линухе всё отлично запускалось. Но на C++ Builder-е как только кидаю плагин в соотв. папку сервера, то в списке плагинов в серверной проге комфорта этот плагин есть, но как только я его выбираю кнопки "О плагине" и "Настроить" остаются не активными, а при запуске плагина пишется "Ошибка при запуске плагина "test". Плагин остановлен", хотя прошлый мой проект на Delphi всё отлично работало и кнопки активные были. Попробовал на своей машине запустить(Win 7 x64) - всё тоже отлично работает, попробовал на виртуалке запустить (WinXP SP2) так само всё отлично запустилось.
Странно что проект под Delphi то запустился... Ни у кого нет никаких идей по этому поводу?
$teelR@t
Сообщения: 348
Зарегистрирован: 19:14, 30.03.2008
Откуда: Украина
Контактная информация:

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

Сообщение $teelR@t »

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

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

Сообщение DIGGER »

$teelR@t писал(а):Да ладно вам... ничего не затирается. Под указатель выделяется память размером с длинну текста + 1 символ. И вот этот 1 символ последний присваивается нулю ;)
Из доки читаем:
текст(описание)
Текстовые данные. Представляют из себя число(длина текста в байтах) + сам текст.
Где тут +1 символ :?:
$teelR@t
Сообщения: 348
Зарегистрирован: 19:14, 30.03.2008
Откуда: Украина
Контактная информация:

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

Сообщение $teelR@t »

DIGGER писал(а):
текст(описание)
Текстовые данные. Представляют из себя число(длина текста в байтах) + сам текст.
Где тут +1 символ :?:
Эммм, а кто говорит, что я юзаю тот же указатель, который мне передаёт сервер? Я создаю новый указатель, размечаю под него память, записываю в него текст с указателя, который мне передал сервак и добавляю в конец 0 :)
Аватара пользователя
DIGGER
Сообщения: 264
Зарегистрирован: 13:46, 15.05.2009

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

Сообщение DIGGER »

В таком случае Вы (как и joub) тратите время процессора в пустую :)
$teelR@t
Сообщения: 348
Зарегистрирован: 19:14, 30.03.2008
Откуда: Украина
Контактная информация:

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

Сообщение $teelR@t »

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