Здесь обсуждаются графические оболочки, боты, языковые файлы и другие дополнения к CommFort 4.
			
		
		
			
				
																			
								sonic 							 
									
		Сообщения:  43  		Зарегистрирован:  01:14, 05.12.2007 		
		
						
						
		 
		
						
					
													
							
						
									
						Сообщение 
					 
								 sonic   »  16:31, 17.09.2008 
			
			
			
			
			Ув. разработчики.
Помоему описание команды
Код: Выделить всё 
Подключение к каналу бота	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 							 
						Администратор 			
		Сообщения:  6897  		Зарегистрирован:  09:56, 27.06.2005 		
		
						
						
		 
		
						
					
													
							
						
									
						Сообщение 
					 
								 Maxim Mirgorodsky   »  10:37, 18.09.2008 
			
			
			
			
			действительно. 
 
правильное описание: 
Текст(канал)+текст(текст1(тема)+текст1(дата и время последнего изменения темы)+текст1(логин пользователя изменившего тему последний раз))+текст(приветствие) 
 
где текст1() = 1байт unsigned(длина строки)+текст
			
			
									
						
										
						 
		 
				
		
		 
	 
				
		
		
			
				
																			
								Chief 							 
									
		Сообщения:  17  		Зарегистрирован:  22:10, 26.07.2007 		
		
											Откуда:  OpenProject 
							
						
		 
		
						
					
													
							
						
									
						Сообщение 
					 
								 Chief   »  20:22, 25.09.2008 
			
			
			
			
			Серверная часть вызывает 
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 							 
						Администратор 			
		Сообщения:  6897  		Зарегистрирован:  09:56, 27.06.2005 		
		
						
						
		 
		
						
					
													
							
						
									
						Сообщение 
					 
								 Maxim Mirgorodsky   »  03:29, 26.09.2008 
			
			
			
			
			Используется соглашение не __cdecl, а __stdcall.
__export BYTE __cdecl Premoderation
Правильно: __export BOOL
 
			
			
									
						
										
						 
		 
				
		
		 
	 
				
		
		
			
				
																			
								Chief 							 
									
		Сообщения:  17  		Зарегистрирован:  22:10, 26.07.2007 		
		
											Откуда:  OpenProject 
							
						
		 
		
						
					
													
							
						
									
						Сообщение 
					 
								 Chief   »  10:29, 26.09.2008 
			
			
			
			
			2
Maxim 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 							 
						Администратор 			
		Сообщения:  6897  		Зарегистрирован:  09:56, 27.06.2005 		
		
						
						
		 
		
						
					
													
							
						
									
						Сообщение 
					 
								 Maxim Mirgorodsky   »  12:10, 26.09.2008 
			
			
			
			
			Декорирование имен экспортируемых функций необходимо отключить. 
 
Виртуальный пользователь может не пройти авторизацию в случае использования запрещенных символов в имени пользователя, либо в случае неверного пароля.
			
			
									
						
										
						 
		 
				
		
		 
	 
				
		
		
			
				
																			
								Chief 							 
									
		Сообщения:  17  		Зарегистрирован:  22:10, 26.07.2007 		
		
											Откуда:  OpenProject 
							
						
		 
		
						
					
													
							
						
									
						Сообщение 
					 
								 Chief   »  22:18, 27.09.2008 
			
			
			
			
			На будущее:
Для MSVC 
1. В командную строку линковщика добавляете 
/DEF:<filename.def> ;
2. В <filename.def>:
Код: Выделить всё 
LIBRARY <filename.def>
EXPORTS 
	PluginInit
	PluginTerminate
	PluginProcess
	Premoderation
Проблема связана с различием в в именовании экспортируемых функций соглашением 
__stdcall  в BCB и MSVC.
 
			
			
									
						
										
						 
		 
				
		
		 
	 
				
		
		
			
				
																			
								Maxim Mirgorodsky 							 
						Администратор 			
		Сообщения:  6897  		Зарегистрирован:  09:56, 27.06.2005 		
		
						
						
		 
		
						
					
													
							
						
									
						Сообщение 
					 
								 Maxim Mirgorodsky   »  04:23, 29.09.2008 
			
			
			
			
			Chief  
 
Это называется декорированием имен функций. В плагинах для CommFort оно не используется как раз для совместимости с разными средами программирования. В различных средах отключение декорирования делается по-разному. В MSVC один из способов - тот что Вы описали.
			
			
									
						
										
						 
		 
				
		
		 
	 
				
		
		
			
				
								dv 							 
									
		Сообщения:  1845  		Зарегистрирован:  10:28, 11.05.2007 		
		
											Откуда:  Краснодар 
							
						
		 
		
						
					
													
							
						
									
						Сообщение 
					 
								 dv   »  05:30, 29.09.2008 
			
			
			
			
			[Cообщeние yдалено] 
			
			
													
					Последний раз редактировалось 
dv  18:18, 29.06.2012, всего редактировалось 1 раз.
									
 
			
						
							Дополнения для CommFort 
Адрес чата: chat.telered.ru 
 
 
 
 
.
			
						 
		 
				
		
		 
	 
				
		
		
			
				
																			
								Maxim Mirgorodsky 							 
						Администратор 			
		Сообщения:  6897  		Зарегистрирован:  09:56, 27.06.2005 		
		
						
						
		 
		
						
					
													
							
						
									
						Сообщение 
					 
								 Maxim Mirgorodsky   »  09:20, 29.09.2008 
			
			
			
			
			Попробуйте не сразу выходить. Команда публикации сообщения в приват отправляет запрос серверу, сервер возвращает клиенту информацию о доставке сообщения и в этот момент сообщение публикуется, то есть, если приват был закрыт, он откроется заново.
			
			
									
						
										
						 
		 
				
		
		 
	 
				
		
		
			
				
								dv 							 
									
		Сообщения:  1845  		Зарегистрирован:  10:28, 11.05.2007 		
		
											Откуда:  Краснодар 
							
						
		 
		
						
					
													
							
						
									
						Сообщение 
					 
								 dv   »  09:56, 29.09.2008 
			
			
			
			
			[Cообщeние yдалено] 
			
			
													
					Последний раз редактировалось 
dv  18:16, 29.06.2012, всего редактировалось 1 раз.
									
 
			
						
							Дополнения для CommFort 
Адрес чата: chat.telered.ru 
 
 
 
 
.
			
						 
		 
				
		
		 
	 
				
		
		
			
				
																			
								Maxim Mirgorodsky 							 
						Администратор 			
		Сообщения:  6897  		Зарегистрирован:  09:56, 27.06.2005 		
		
						
						
		 
		
						
					
													
							
						
									
						Сообщение 
					 
								 Maxim Mirgorodsky   »  12:09, 29.09.2008 
			
			
			
			
			В данном случае более корректным будет не устанавливать паузу, а перехватывать событие публикации в приватный канал. И именно с этим событием связать закрытие канала. Потому что среда бывает разной, в некоторых сетях ответ от сервера может задержаться на несколько секунд.
			
			
									
						
										
						 
		 
				
		
		 
	 
				
				
		
		
			
				
								NexxGen 							 
									
		Сообщения:  704  		Зарегистрирован:  16:43, 03.04.2008 		
		
											Откуда:  Печора 
							
						
		 
		
						
					
													
							
						
									
						Сообщение 
					 
								 NexxGen   »  08:21, 30.09.2008 
			
			
			
			
			Возможность преключения плагина в "скрытый" режим, т.е. плагин работает, но в чате ввиде отдельного пользователя не отображается.
			
			
									
						
							Z182712747589 и R377043131694 — для поддержки энтузиазма на добровольных началах))
			
						 
		 
				
		
		 
	 
				
		
		
			
				
								NexxGen 							 
									
		Сообщения:  704  		Зарегистрирован:  16:43, 03.04.2008 		
		
											Откуда:  Печора 
							
						
		 
		
						
					
													
							
						
									
						Сообщение 
					 
								 NexxGen   »  15:20, 12.10.2008 
			
			
			
			
			Клиент Commfort 4.02, при изменении состояния, НЕ отправляет пакеты на порт бота!
			
			
									
						
							Z182712747589 и R377043131694 — для поддержки энтузиазма на добровольных началах))