Re: Технология создания плагинов
Добавлено: 19:26, 04.01.2011
Можно конкретнее как указывать срок.KGB писал(а):Срок - тип Double, а не целое число. Было тут
Можно конкретнее как указывать срок.KGB писал(а):Срок - тип Double, а не целое число. Было тут
Добавить функцию отсюда: http://commfort.com/ru/forum/viewtopic. ... 931#p46931anonim писал(а): Можно конкретнее как указывать срок.
Код: Выделить всё
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 писал(а):Добавить функцию отсюда: 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))
Указал 3 сразу забанил. Теперь понял ошибку спасибо.KGB писал(а):А если указать тип идентификации 3? А то ограничение по IP адресу, а передается логин, как я понял.
Прежде всего ты знаешь язык программирования, например Delphi,C++ и др.. ???Zka писал(а):Помогите!!!
Дорогие программисты, кодеры и просто те, кто может написать простой плагин. Не могли бы вы утратить немножечко времени и записать видеоролик по созданию плагина? Просто и самому надо и я думаю другим не помешает... И если можно, то сделайте так, чтобы в плагине (Плагины-"О плагине") в меню "О плагине" стояла совершенно любая картинка (неважно: маленькая или большая - главное чтоб картинка была.) И ещё: чтобы в том же пункте был например текст размера 22, красный и жирный....
Код: Выделить всё
#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"
Код: Выделить всё
Module 1 (13) is activated
Вроде как в плагин старт недостаточно просто вернуть тру. Там надо сохранить идентификаторы какие-то и еще всякая хрень... покажи полный кодPluginStart(DWORD, typeCommFortProcess, typeCommFortGetData) { return TRUE; }
Это и есть полный код.cilvay писал(а): покажи полный код
Код: Выделить всё
...
DWORD dwPluginID;
typeCommFortProcess CommFortProcess;
typeCommFortGetData CommFortGetData;
...
BOOL PluginStart(DWORD dwThisPluginID, typeCommFortProcess func1, typeCommFortGetData func2)
{
dwPluginID = dwThisPluginID;
CommFortProcess = func1;
CommFortGetData = func2;
return TRUE;
}
Код: Выделить всё
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;//возвращаемое значение - объем записанных данных
}