Технология создания плагинов и программ-дополнений
- 
				Maxim Mirgorodsky
- Администратор
- Сообщения: 6897
- Зарегистрирован: 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 символов, а меньшее выделение памяти оптимизирует работу программы.
 , можно ваш пример в студию ?
 , можно ваш пример в студию ? 
А моя заморочка в том - что я использую самаписный класс для дальнейшей обработки, а при передаче текстового поля - не факт что строка будет заканчиваться на ноль... - лишний мусор мне там никчему )
вот кто бы еще подсказал - как при инициализации класса динамически выделять ему память(через конструктор/диструктор) - притом что переменная класса объявлена глобально...
Re: Технология создания плагинов и программ-дополнений
Извините, но пока что нет, он ещё не доработан.joub писал(а):Спасибо, учту, можно ваш пример в студию ?
Дык я тоже самописный класс используюjoub писал(а):А моя заморочка в том - что я использую самаписный класс для дальнейшей обработки, а при передаче текстового поля - не факт что строка будет заканчиваться на ноль... - лишний мусор мне там никчему )
 . Ну так строка и так не нулём заканчивается, поэтому ручками дописываем к ней 0
. Ну так строка и так не нулём заканчивается, поэтому ручками дописываем к ней 0  .
.P.S. Шутки ради. При инициализации плагина есть переменная IsFemale (в переводе с инглиша "Девушка?") логического типа (true - да, false - нет), а эквивалентом этим словам являются true - 1, false - 0. Следовательно получается что если пользователь - девушка, то IsFemale == 1 что заведомо портит всё представление о женщинах и мужчинах(женщина должна равняться 0-ю, а мужчина 1-це) кто догадался о чём я тот молодесь)))...
Так что предлагаю переименовать переменную в нул плагине в IsMale и сделать соотв. изменения в серваке).
Re: Технология создания плагинов и программ-дополнений
Ну-ну$teelR@t писал(а):… поэтому ручками дописываем к ней 0
 Вы же затираете себе же память
 Вы же затираете себе же память  (А "в конце" памяти можно ещё нарваться 0x0000000C, при чём этот баг может быть плавающим)
  (А "в конце" памяти можно ещё нарваться 0x0000000C, при чём этот баг может быть плавающим)Re: Технология создания плагинов и программ-дополнений
Да ладно вам... ничего не затирается. Под указатель выделяется память размером с длинну текста + 1 символ. И вот этот 1 символ последний присваивается нулюDIGGER писал(а):Ну-нуВы же затираете себе же память
(А "в конце" памяти можно ещё нарваться 0x0000000C, при чём этот баг может быть плавающим)

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

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

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