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

Здесь обсуждаются графические оболочки, боты, языковые файлы и другие дополнения к CommFort 4.
sonic
Сообщения: 43
Зарегистрирован: 01:14, 05.12.2007

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

Сообщение sonic »

Ув. разработчики.
Помоему описание команды

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

Подключение к каналу бота	62	Текст(канал)+текст(тема)+текст(приветствие)
не соответствует действительности:

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

04 00 00 00 6d 61 69 6e 1c 00 00 00 04 f2 e5 ec    ....main.....тем
e0 10 31 37 2e 30 39 2e 32 30 30 38 20 31 36 3a    а.17.09.2008 16:
32 38 05 4d 69 74 65 6b 00 00 00 00 0d 0a          28.Mitek......
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

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

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

действительно.

правильное описание:
Текст(канал)+текст(текст1(тема)+текст1(дата и время последнего изменения темы)+текст1(логин пользователя изменившего тему последний раз))+текст(приветствие)

где текст1() = 1байт unsigned(длина строки)+текст
Chief
Сообщения: 17
Зарегистрирован: 22:10, 26.07.2007
Откуда: OpenProject

Проблема с передачей данных (plugin)

Сообщение Chief »

Серверная часть вызывает PluginInit и на этом все (далее вызовов PluginProcess нет!). В логах сервера ошибок нет...
Компилятор: VC++ 9.0 (Visual Studio 2008)

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

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

#ifdef __cplusplus
extern "C" {
#endif

#pragma pack(push)
#pragma pack(1)

#define __export __declspec(dllexport)

bool APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
	switch (ul_reason_for_call)
	{
		case DLL_PROCESS_ATTACH:
		case DLL_THREAD_ATTACH:
		case DLL_THREAD_DETACH:
		case DLL_PROCESS_DETACH:
			break;
	}
	return TRUE;
}

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;

__export BYTE __cdecl PluginInit(DWORD dwThisPluginID, sPluginInfo * plInfo, sBotUserInfo * botInfo, typeCommFortProcess func1)
{
	dwPluginID = dwThisPluginID;

	strcpy_s((* plInfo).strPluginName, "Null");
	strcpy_s((* plInfo).strPluginDescription, "Null");
	strcpy_s((* plInfo).strPluginVersion, "4.02");

	strcpy_s((* botInfo).strBotName, "bot");
	strcpy_s((* botInfo).strBotPassword, "password");

	(* botInfo).bIsFemale = false;

	CommFortProcess = func1;

	return 0;
}

__export BYTE __cdecl PluginTerminate(void)
{
	return 0;
}

__export BYTE __cdecl PluginProcess(DWORD dwMessageID, BYTE * bMessage, DWORD dwMessageLength)
{
	return 0;
}

__export BYTE __cdecl Premoderation(DWORD dwMessageID, BYTE * bMessage, DWORD * dwMessageLength)
{
	return false;
}

#ifdef __cplusplus
}
#endif
Исходник:
http://rapidshare.com/files/148321352/C ... s.zip.html

Собраный:
http://rapidshare.com/files/148321730/A ... k.zip.html
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

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

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

Используется соглашение не __cdecl, а __stdcall.
__export BYTE __cdecl Premoderation
Правильно: __export BOOL
Chief
Сообщения: 17
Зарегистрирован: 22:10, 26.07.2007
Откуда: OpenProject

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

Сообщение Chief »

2Maxim Mirgorodsky

Вызовы при __cdecl (export C):

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

PluginInit PluginProcess PluginTerminate Premoderation
Вызовы при __stdcall (export C):

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

_PluginInit@16 _PluginProcess@12 _PluginTerminate@0 _Premoderation@12
P. S. CommFort_server вызывает функцию PluginInit, но после возврата ничего не происходит, т.е. бот регистрацию не проходит (вот о чем шла речь).
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

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

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

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

Виртуальный пользователь может не пройти авторизацию в случае использования запрещенных символов в имени пользователя, либо в случае неверного пароля.
Chief
Сообщения: 17
Зарегистрирован: 22:10, 26.07.2007
Откуда: OpenProject

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

Сообщение Chief »

На будущее:

Для MSVC
1. В командную строку линковщика добавляете /DEF:<filename.def>;
2. В <filename.def>:

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

LIBRARY <filename.def>
EXPORTS 
	PluginInit
	PluginTerminate
	PluginProcess
	Premoderation
Проблема связана с различием в в именовании экспортируемых функций соглашением __stdcall в BCB и MSVC.
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

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

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

Chief

Это называется декорированием имен функций. В плагинах для CommFort оно не используется как раз для совместимости с разными средами программирования. В различных средах отключение декорирования делается по-разному. В MSVC один из способов - тот что Вы описали.
Аватара пользователя
dv
Сообщения: 1845
Зарегистрирован: 10:28, 11.05.2007
Откуда: Краснодар

Выход из привата (Delphi).

Сообщение dv »

[Cообщeние yдалено]
Последний раз редактировалось dv 18:18, 29.06.2012, всего редактировалось 1 раз.
Дополнения для CommFort
Адрес чата: chat.telered.ru




.
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

Re: Выход из привата (Delphi).

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

Попробуйте не сразу выходить. Команда публикации сообщения в приват отправляет запрос серверу, сервер возвращает клиенту информацию о доставке сообщения и в этот момент сообщение публикуется, то есть, если приват был закрыт, он откроется заново.
Аватара пользователя
dv
Сообщения: 1845
Зарегистрирован: 10:28, 11.05.2007
Откуда: Краснодар

Re: Выход из привата (Delphi).

Сообщение dv »

[Cообщeние yдалено]
Последний раз редактировалось dv 18:16, 29.06.2012, всего редактировалось 1 раз.
Дополнения для CommFort
Адрес чата: chat.telered.ru




.
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

Re: Выход из привата (Delphi).

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

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

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

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

Хотелось бы поинтересоваться у разработчиков плагинов - есть ли какие-либо пожелания?
Аватара пользователя
NexxGen
Сообщения: 704
Зарегистрирован: 16:43, 03.04.2008
Откуда: Печора

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

Сообщение NexxGen »

Возможность преключения плагина в "скрытый" режим, т.е. плагин работает, но в чате ввиде отдельного пользователя не отображается.
Z182712747589 и R377043131694 — для поддержки энтузиазма на добровольных началах))
Аватара пользователя
NexxGen
Сообщения: 704
Зарегистрирован: 16:43, 03.04.2008
Откуда: Печора

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

Сообщение NexxGen »

Клиент Commfort 4.02, при изменении состояния, НЕ отправляет пакеты на порт бота!
Z182712747589 и R377043131694 — для поддержки энтузиазма на добровольных началах))
Закрыто