Страница 28 из 42

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

Добавлено: 19:14, 08.12.2009
DIGGER
Maxim Mirgorodsky, спасибо за пояснения!

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

и ещё вопрос: очень трудно делать отладку для чата поскольку он запакован и защищён как раз от отладки, что нибудь можете посоветовать? (кроме быть внимательным при написании кода :))

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

Добавлено: 15:22, 10.12.2009
Maxim Mirgorodsky
Версия заполняется так же как и другая текстовая информация. Так что ошибки здесь быть не должно.

По запаковке - к сожалению, не могу помочь.

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

Добавлено: 11:31, 11.12.2009
Maxim Mirgorodsky
В описании технологии создания плагинов и программ-дополнений не были сказаны ограничения строки состояния:

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

В новой версии описания технологии работы плагинов эта информация будет включена.

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

Добавлено: 13:27, 11.12.2009
DIGGER
народ просит для канала events:
…вызова контекстно-зависимого меню при нажатии на ник как в обычном канале…
что бы можно было вставлять ссылки на приват/ЛС по нажатию правой кнопки на которые показывалось бы контекстное меню.
Есть возможность это дело как-то реализовать в текущей версии чата? (может я не сообразил как?)

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

Добавлено: 15:17, 11.12.2009
Maxim Mirgorodsky
Не совсем понятно что именно нужно.

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

Добавлено: 16:20, 11.12.2009
DIGGER
Сейчас в каналах: при нажатии правой кнопкой на ник появляется меню пользователя (как правой кнопкой на список пользователей). Хочется что была возможность показывать это меню вставляя специальный текст в ссылку (как сейчас private или message) по нажатии на которой всплывало бы контекстное меню пользователя.
В общем народ просит сделать что бы в канале Events тоже можно было вызывать меню пользователя по нажатию на ник.

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

Добавлено: 10:23, 14.12.2009
Maxim Mirgorodsky
Хочется что была возможность показывать это меню вставляя специальный текст в ссылку
И как это связано с технологией создания плагинов и программ-дополнений?

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

Добавлено: 15:32, 14.12.2009
DIGGER
выделенная Вами цитата никак не связана с темой топика — это было лишь моё предположение что бы лучше пояснить что нужно от чата. Если такой возможности в чате сейчас нет, то тогда пойду писать в предложения. (я так понял что нет, потому уже потопал писать в предложения)

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

Добавлено: 13:18, 15.12.2009
DIGGER
Возможно где-то обсуждалось. но не нашёл (плохо искал?):
Как плагину узнать ID пользователя? Или это ещё не реализовано?

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

Добавлено: 14:59, 16.12.2009
Maxim Mirgorodsky
Не реализовано. Будет реализовано в несовместимой версии (потому что тогда систему плагинов все равно придется изменять из-за перехода на юникод).

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

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

Добавлено: 14:12, 17.12.2009
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 в функцию инициализации. Работает...
Посмотрите по коду где ошибка?

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

Добавлено: 18:26, 17.12.2009
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");
}
//---------------------------------------------------------------------------

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

Добавлено: 18:44, 17.12.2009
Joneg
Ошибка при запуске плагина бла-бла-бла. Плагин остановлен.

Функции стали выглядеть вот так:
PluginInit@16
PluginProcess@12
PluginShowAbout@0
PluginShowOptions@0
PluginTerminate@0

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

Добавлено: 18:47, 17.12.2009
VIRUS
Какой компилятор?

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

Добавлено: 18:50, 17.12.2009
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