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

Здесь обсуждаются технические аспекты создания дополнений.
Аватара пользователя
SV
Сообщения: 797
Зарегистрирован: 00:11, 06.09.2010
Откуда: Киров

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

Сообщение SV »

KGB писал(а):Срок - тип Double, а не целое число. Было тут
Можно конкретнее как указывать срок.
KGB
Сообщения: 659
Зарегистрирован: 08:54, 13.07.2010
Откуда: Чебоксары, Россия
Контактная информация:

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

Сообщение KGB »

anonim писал(а): Можно конкретнее как указывать срок.
Добавить функцию отсюда: http://commfort.com/ru/forum/viewtopic. ... 931#p46931
И вызвать так:

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

aDataToSend := fTextToAnsiString('Repeater')+ //имя виртуального пользователя
fIntegerToAnsiString(0)+ //тип идентификации
fTextToAnsiString(uSenderLogin)+ //объект идентификации
fIntegerToAnsiString(2)+ //тип ограничения
fTextToAnsiString(uChannel)+ //канал ограничения
fDoubleToAnsiString(1.0)+ //срок
fTextToAnsiString('123')+//Причина
fIntegerToAnsiString(1);//тип анонимности
CommFortProcess(dwPluginID, 1040, PAnsiChar(aDataToSend), Length(aDataToSend))
Должно заработать.
Аватара пользователя
SV
Сообщения: 797
Зарегистрирован: 00:11, 06.09.2010
Откуда: Киров

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

Сообщение SV »

KGB писал(а):Добавить функцию отсюда: http://commfort.com/ru/forum/viewtopic. ... 931#p46931
И вызвать так:

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

aDataToSend := fTextToAnsiString('Repeater')+ //имя виртуального пользователя
fIntegerToAnsiString(0)+ //тип идентификации
fTextToAnsiString(uSenderLogin)+ //объект идентификации
fIntegerToAnsiString(2)+ //тип ограничения
fTextToAnsiString(uChannel)+ //канал ограничения
fDoubleToAnsiString(1.0)+ //срок
fTextToAnsiString('123')+//Причина
fIntegerToAnsiString(1);//тип анонимности
CommFortProcess(dwPluginID, 1040, PAnsiChar(aDataToSend), Length(aDataToSend))
Должно заработать.
Не работает.
KGB
Сообщения: 659
Зарегистрирован: 08:54, 13.07.2010
Откуда: Чебоксары, Россия
Контактная информация:

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

Сообщение KGB »

А если указать тип идентификации 3? А то ограничение по IP адресу, а передается логин, как я понял.
Аватара пользователя
SV
Сообщения: 797
Зарегистрирован: 00:11, 06.09.2010
Откуда: Киров

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

Сообщение SV »

KGB писал(а):А если указать тип идентификации 3? А то ограничение по IP адресу, а передается логин, как я понял.
Указал 3 сразу забанил. Теперь понял ошибку спасибо.
Аватара пользователя
Zka
Сообщения: 29
Зарегистрирован: 18:34, 27.12.2010
Откуда: Гомель, Беларусь. Сеть Гарант

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

Сообщение Zka »

Помогите!!!

Дорогие программисты, кодеры и просто те, кто может написать простой плагин. Не могли бы вы утратить немножечко времени и записать видеоролик по созданию плагина? Просто и самому надо и я думаю другим не помешает... И если можно, то сделайте так, чтобы в плагине (Плагины-"О плагине") в меню "О плагине" стояла совершенно любая картинка (неважно: маленькая или большая - главное чтоб картинка была.) И ещё: чтобы в том же пункте был например текст размера 22, красный и жирный....
Аватара пользователя
SV
Сообщения: 797
Зарегистрирован: 00:11, 06.09.2010
Откуда: Киров

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

Сообщение SV »

Zka писал(а):Помогите!!!

Дорогие программисты, кодеры и просто те, кто может написать простой плагин. Не могли бы вы утратить немножечко времени и записать видеоролик по созданию плагина? Просто и самому надо и я думаю другим не помешает... И если можно, то сделайте так, чтобы в плагине (Плагины-"О плагине") в меню "О плагине" стояла совершенно любая картинка (неважно: маленькая или большая - главное чтоб картинка была.) И ещё: чтобы в том же пункте был например текст размера 22, красный и жирный....
Прежде всего ты знаешь язык программирования, например Delphi,C++ и др.. ???
Cilvay
Сообщения: 816
Зарегистрирован: 14:55, 16.06.2008

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

Сообщение Cilvay »

У меня вопрос такой:
Я примерно знаю как сделать форму в окне чата я разобрался (спасибо SJ за пример).
Глядя на плагины PaintBord и FileSender оч интересно стало как там реализованы дополнительные пункты контексного меню и дополнительная иконка на панели задач окна чата (там где иконки "обьявления" "список каналов" и т.д.)
Аватара пользователя
dark
Сообщения: 48
Зарегистрирован: 12:28, 02.02.2007

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

Сообщение dark »

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

#include <windows.h>

typedef VOID __stdcall (*typeCommFortProcess)(DWORD dwPluginID, DWORD dID, BYTE * bOutBuffer, DWORD dwOutBufferSize);
typedef DWORD __stdcall (*typeCommFortGetData)(DWORD dwPluginID, DWORD dwID, BYTE * bInBuffer, DWORD dwInBufferSize, BYTE * bOutBuffer, DWORD dwOutBufferSize);

extern "C" __declspec(dllexport) BOOL PluginStart(DWORD dwThisPluginID, typeCommFortProcess, typeCommFortGetData);
extern "C" __declspec(dllexport) VOID PluginStop();

extern "C" __declspec(dllexport) VOID PluginProcess(DWORD dwID, BYTE * bInBuffer, DWORD dwInBufferSize);
extern "C" __declspec(dllexport) DWORD PluginGetData(DWORD dwID, BYTE * bInBuffer, DWORD dwInBufferSize, BYTE * bOutBuffer, DWORD dwOutBufferSize);
extern "C" __declspec(dllexport) BOOL PluginPremoderation(DWORD dwID, wchar_t * wText, DWORD *dwTextLength);

extern "C" __declspec(dllexport) VOID PluginShowOptions();
extern "C" __declspec(dllexport) VOID PluginShowAbout();

//---------------------------------------------------------------------------
BOOL PluginStart(DWORD, typeCommFortProcess, typeCommFortGetData) { return TRUE; }
VOID PluginStop() {}
VOID PluginProcess(DWORD, BYTE *, DWORD) {}
BOOL PluginPremoderation(DWORD, wchar_t *, DWORD *) { return FALSE; }
DWORD PluginGetData(DWORD, BYTE *, DWORD, BYTE *, DWORD) { return 0; }
VOID PluginShowOptions() {}
VOID PluginShowAbout() {}
Закидываю это дело в папку с плагинами и открывая настройки:

Изображение

Сообщение:

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

Application error (503, 503, 247, 0): "Access violation at address 0050EC0B in module 'CommFort.exe'. Read of address 00000504"
Upd. А через некоторое время еще вот:

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

Module 1 (13) is activated
Где ошибка? Помогите школьнику.
Вложения
cfplg.png
(23.28 КБ) 106 скачиваний
Cilvay
Сообщения: 816
Зарегистрирован: 14:55, 16.06.2008

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

Сообщение Cilvay »

PluginStart(DWORD, typeCommFortProcess, typeCommFortGetData) { return TRUE; }
Вроде как в плагин старт недостаточно просто вернуть тру. Там надо сохранить идентификаторы какие-то и еще всякая хрень... покажи полный код
Аватара пользователя
dark
Сообщения: 48
Зарегистрирован: 12:28, 02.02.2007

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

Сообщение dark »

cilvay писал(а): покажи полный код
Это и есть полный код.
Добавление этого:

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

...
DWORD dwPluginID;

typeCommFortProcess CommFortProcess;
typeCommFortGetData CommFortGetData;
...
BOOL PluginStart(DWORD dwThisPluginID, typeCommFortProcess func1, typeCommFortGetData func2)
{
       dwPluginID = dwThisPluginID;
       CommFortProcess = func1;
       CommFortGetData = func2;

       return TRUE;
}
...ничего не меняет. Еще есть мысли?
Cilvay
Сообщения: 816
Зарегистрирован: 14:55, 16.06.2008

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

Сообщение Cilvay »

больше нет мыслей... надо думать..
ОреЛ
Сообщения: 376
Зарегистрирован: 11:18, 11.07.2008
Откуда: Ульяновск
Контактная информация:

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

Сообщение ОреЛ »

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

DWORD PluginGetData(DWORD dwID, BYTE * bInBuffer, DWORD dwInBufferSize, BYTE * bOutBuffer, DWORD dwOutBufferSize)
{//функция передачи данных программе
	int iReadOffset = 0; //вспомогательные переменные для упрощения работы с блоком данных
	int iWriteOffset = 0;
	//при значении dwOutBufferSize равным нулю функция должна вернуть объем данных, ничего не записывая
	if(dwID==2800) //предназначение плагина
	{
		if(dwOutBufferSize==0)
		return 4; //объем памяти в байтах, которую необходимо выделить программе
		fWriteInteger(bOutBuffer,&iWriteOffset,0);  //плагин подходит как для клиента, так и для сервера
		return 4;//объем заполненного буфера в байтах
	}
	else if(dwID==2810) //название плагина (отображается в списке)
	{
		UnicodeString uName = L"NULL: проверочный плагин";//название плагина
		int iSize = uName.Length()*2+4;
		if(dwOutBufferSize==0)
		return iSize; //объем памяти в байтах, которую необходимо выделить программе
		fWriteText(bOutBuffer, &iWriteOffset, uName);
		return iSize;//объем заполненного буфера в байтах
	}
	return 0;//возвращаемое значение - объем записанных данных
}
как видно из null-примера плагин должен передавать предназначение и название плагина. возможно в этом и кроется проблема, что он не может считать эти значения.
Когда пишете программу, всегда думайте о том, что её может затем поддерживать психопат и насильник, который знает где вы живёте.
— Martin Golding
Cilvay
Сообщения: 816
Зарегистрирован: 14:55, 16.06.2008

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

Сообщение Cilvay »

вот тока что хотел сказать, но меня опередили
Я то думаю почему код полный как заявили а название плагина еще и с расширением отображается как в папке
@serg@
Сообщения: 702
Зарегистрирован: 14:50, 20.07.2009

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

Сообщение @serg@ »

Вроде как PluginGetData не может быть пустой, посмотри пример NULL плагина.
UPD: всех почти одновременно осенило.
Закрыто