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

Здесь обсуждаются графические оболочки, боты, языковые файлы и другие дополнения к CommFort 4.
Аватара пользователя
DIGGER
Сообщения: 264
Зарегистрирован: 13:46, 15.05.2009

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

Сообщение DIGGER »

Maxim Mirgorodsky, спасибо за пояснения!

Maxim Mirgorodsky, как можно проверить что я "правильно" указываю версию чата в плагине (знаю что правильно, но у меня "маничка" всё проверять, что бы быть уверенным в своём коде + через дебаггер видно что всё верно, если вдруг чего :) )

и ещё вопрос: очень трудно делать отладку для чата поскольку он запакован и защищён как раз от отладки, что нибудь можете посоветовать? (кроме быть внимательным при написании кода :))
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

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

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

Версия заполняется так же как и другая текстовая информация. Так что ошибки здесь быть не должно.

По запаковке - к сожалению, не могу помочь.
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

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

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

В описании технологии создания плагинов и программ-дополнений не были сказаны ограничения строки состояния:

Длина состояния не может превышать 64 символов и не может содержать служебных символов. Строка состояния не может состоять из одних только пробелов.

В новой версии описания технологии работы плагинов эта информация будет включена.
Аватара пользователя
DIGGER
Сообщения: 264
Зарегистрирован: 13:46, 15.05.2009

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

Сообщение DIGGER »

народ просит для канала events:
…вызова контекстно-зависимого меню при нажатии на ник как в обычном канале…
что бы можно было вставлять ссылки на приват/ЛС по нажатию правой кнопки на которые показывалось бы контекстное меню.
Есть возможность это дело как-то реализовать в текущей версии чата? (может я не сообразил как?)
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

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

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

Не совсем понятно что именно нужно.
Аватара пользователя
DIGGER
Сообщения: 264
Зарегистрирован: 13:46, 15.05.2009

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

Сообщение DIGGER »

Сейчас в каналах: при нажатии правой кнопкой на ник появляется меню пользователя (как правой кнопкой на список пользователей). Хочется что была возможность показывать это меню вставляя специальный текст в ссылку (как сейчас private или message) по нажатии на которой всплывало бы контекстное меню пользователя.
В общем народ просит сделать что бы в канале Events тоже можно было вызывать меню пользователя по нажатию на ник.
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

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

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

Хочется что была возможность показывать это меню вставляя специальный текст в ссылку
И как это связано с технологией создания плагинов и программ-дополнений?
Аватара пользователя
DIGGER
Сообщения: 264
Зарегистрирован: 13:46, 15.05.2009

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

Сообщение DIGGER »

выделенная Вами цитата никак не связана с темой топика — это было лишь моё предположение что бы лучше пояснить что нужно от чата. Если такой возможности в чате сейчас нет, то тогда пойду писать в предложения. (я так понял что нет, потому уже потопал писать в предложения)
Аватара пользователя
DIGGER
Сообщения: 264
Зарегистрирован: 13:46, 15.05.2009

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

Сообщение DIGGER »

Возможно где-то обсуждалось. но не нашёл (плохо искал?):
Как плагину узнать ID пользователя? Или это ещё не реализовано?
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

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

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

Не реализовано. Будет реализовано в несовместимой версии (потому что тогда систему плагинов все равно придется изменять из-за перехода на юникод).

Вообще в следующей несовместимой версии будет серьезно усилен механизм плагинов, потому что мы избавимся от необходимости сохранения совместимости. Так что ждем пожеланий по этой части в соответствующей теме :).
Joneg
Сообщения: 11
Зарегистрирован: 10:15, 09.09.2009

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

Сообщение Joneg »

Всем привет.
Промучался весь день. Сдвига нет.

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

#include <windows.h>
#include <string.h>

struct sPluginInfo
{
	char strPluginName[255];
	char strPluginDescription[255];
	char strPluginVersion[255];
};
struct sBotUserInfo
{
	char strBotName[255];
	char strBotPassword[255];
	bool bIsFemale;
};

DWORD dwPluginID;

typedef BYTE __stdcall (*typeCommFortProcess)(DWORD dwPluginID, DWORD dwMessageID, BYTE * bMessage, DWORD dwMessageLength);

typeCommFortProcess CommFortProcess;

extern "C" __declspec(dllexport) BYTE PluginInit(DWORD dwThisPluginID, sPluginInfo *plInfo, sBotUserInfo *botInfo, typeCommFortProcess);
extern "C" __declspec(dllexport) BYTE PluginTerminate();
extern "C" __declspec(dllexport) BYTE PluginProcess(DWORD dwMessageID, BYTE * bMessage, DWORD dwMessageLength);
extern "C" __declspec(dllexport) void PluginShowOptions();
extern "C" __declspec(dllexport) void PluginShowAbout();

//---------------------------------------------------------------------------
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
	return 1;
}
//---------------------------------------------------------------------------
void ShowMessage(char * msg)
{
    MessageBoxA(0, msg, "DLL Message", MB_OK | MB_ICONINFORMATION);
}
//---------------------------------------------------------------------------
BYTE PluginInit(DWORD dwThisPluginID, sPluginInfo *plInfo, sBotUserInfo *botInfo, typeCommFortProcess func1)
{
	dwPluginID = dwThisPluginID;

	strcpy(plInfo->strPluginName,"myPlugin");
	strcpy(plInfo->strPluginDescription,"myPlugin description");
	strcpy(plInfo->strPluginVersion,"4.40");

	strcpy(botInfo->strBotName,"user");
	strcpy(botInfo->strBotPassword,"pass");
	botInfo->bIsFemale = false;

	CommFortProcess = func1;

    (*CommFortProcess)(dwPluginID,41,NULL,0);

	return 0;
}
//---------------------------------------------------------------------------
BYTE PluginTerminate()
{
	return 0;
}
//---------------------------------------------------------------------------
BYTE PluginProcess(DWORD dwMessageID, BYTE * bMessage, DWORD dwMessageLength)
{
    if(dwMessageID==5)
    {
        ShowMessage("Ok");
    }
    if(dwMessageID == 91)
    {
        ShowMessage("debug1");
        Sleep(10000);
    }
	return 0;
}
//---------------------------------------------------------------------------
void PluginShowOptions()
{
    ShowMessage("Options");
}
//---------------------------------------------------------------------------
void PluginShowAbout()
{
	ShowMessage("About");
}
//---------------------------------------------------------------------------
компилирует MinGW.
Выходную либу проверяю в DEPENDS имена не декорируются.
Проблема типична работают кнопки настройка и описание. Запуск не происходит. Ставил MsgBox в функцию инициализации. Работает...
Посмотрите по коду где ошибка?
Аватара пользователя
VIRUS
Сообщения: 174
Зарегистрирован: 13:15, 23.11.2008

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

Сообщение VIRUS »

Подключи __stdcall вот так:

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

#include <windows.h>
#include <string.h>

struct sPluginInfo
{
   char strPluginName[255];
   char strPluginDescription[255];
   char strPluginVersion[255];
};
struct sBotUserInfo
{
   char strBotName[255];
   char strBotPassword[255];
   bool bIsFemale;
};

DWORD dwPluginID;

typedef BYTE __stdcall (*typeCommFortProcess)(DWORD dwPluginID, DWORD dwMessageID, BYTE * bMessage, DWORD dwMessageLength);

typeCommFortProcess CommFortProcess;

extern "C" __declspec(dllexport) BYTE __stdcall PluginInit(DWORD dwThisPluginID, sPluginInfo *plInfo, sBotUserInfo *botInfo, typeCommFortProcess func1);
extern "C" __declspec(dllexport) BYTE __stdcall PluginTerminate();
extern "C" __declspec(dllexport) BYTE __stdcall PluginProcess(DWORD dwMessageID, BYTE * bMessage, DWORD dwMessageLength);
extern "C" __declspec(dllexport) void __stdcall PluginShowOptions();
extern "C" __declspec(dllexport) void __stdcall PluginShowAbout();

//---------------------------------------------------------------------------
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
   return 1;
}
//---------------------------------------------------------------------------
void __stdcall ShowMessage(char * msg)
{
    MessageBoxA(0, msg, "DLL Message", MB_OK | MB_ICONINFORMATION);
}
//---------------------------------------------------------------------------
BYTE __stdcall PluginInit(DWORD dwThisPluginID, sPluginInfo *plInfo, sBotUserInfo *botInfo, typeCommFortProcess func1)
{
   dwPluginID = dwThisPluginID;

   strcpy(plInfo->strPluginName,"myPlugin");
   strcpy(plInfo->strPluginDescription,"myPlugin description");
   strcpy(plInfo->strPluginVersion,"4.40");

   strcpy(botInfo->strBotName,"user");
   strcpy(botInfo->strBotPassword,"pass");
   botInfo->bIsFemale = false;

   CommFortProcess = func1;

    (*CommFortProcess)(dwPluginID,41,NULL,0);

   return 0;
}
//---------------------------------------------------------------------------
BYTE __stdcall PluginTerminate()
{
   return 0;
}
//---------------------------------------------------------------------------
BYTE __stdcall PluginProcess(DWORD dwMessageID, BYTE * bMessage, DWORD dwMessageLength)
{
    if(dwMessageID==5)
    {
        ShowMessage("Ok");
    }
    if(dwMessageID == 91)
    {
        ShowMessage("debug1");
        Sleep(10000);
    }
   return 0;
}
//---------------------------------------------------------------------------
void __stdcall PluginShowOptions()
{
    ShowMessage("Options");
}
//---------------------------------------------------------------------------
void __stdcall PluginShowAbout()
{
   ShowMessage("About");
}
//---------------------------------------------------------------------------
Последний раз редактировалось VIRUS 18:50, 17.12.2009, всего редактировалось 1 раз.
Пользователь думает, что в килобайте 1000 байт, а программист думает, что в километре 1024 метра.
Joneg
Сообщения: 11
Зарегистрирован: 10:15, 09.09.2009

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

Сообщение Joneg »

Ошибка при запуске плагина бла-бла-бла. Плагин остановлен.

Функции стали выглядеть вот так:
PluginInit@16
PluginProcess@12
PluginShowAbout@0
PluginShowOptions@0
PluginTerminate@0
Аватара пользователя
VIRUS
Сообщения: 174
Зарегистрирован: 13:15, 23.11.2008

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

Сообщение VIRUS »

Какой компилятор?
Пользователь думает, что в килобайте 1000 байт, а программист думает, что в километре 1024 метра.
Joneg
Сообщения: 11
Зарегистрирован: 10:15, 09.09.2009

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

Сообщение Joneg »

MinGW 3.4.5
Правильнее будет
gcc-core-3.4.5-20060117-1-vista.tar.gz
gcc-g++-3.4.5-20060117-1-vista.tar.gz
mingw-runtime-3.14.tar.gz
mingw32-make-3.81-2.tar.gz
mingw-utils-0.3.tar.gz
w32api-3.11.tar.gz
binutils-2.18.50-20080109.tar.gz
gdb-6.7.50.20071127-mingw.tar.bz2
Закрыто