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

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

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

Сообщение DIGGER »

Внесу свои 5 копеек:
Юзаю MASM и WinAPI ExpandEnvironmentStrings(), выглядит это примерно так:

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

.DATA?
	INIFileExpanded  WORD 260 DUP(?)
.DATA
	WSTR	INIFile,"%APPDATA%\COMMFORT\CONFIG\MAIN.INI"
.CODE
	INVOKE ExpandEnvironmentStringsW,ADDR INIFile,ADDR INIFileExpanded,260
В переменной INIFileExpanded получаем полный путь к файлу настроек чата. :D
Любые другие пути к папкам чата получаем по аналогии с примером выше.
И не надо городить никаких специальных функций…
Может я что не понял? :)
Slayter
Сообщения: 13
Зарегистрирован: 00:05, 09.11.2009

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

Сообщение Slayter »

DIGGER писал(а):Внесу свои 5 копеек:
Юзаю MASM и WinAPI ExpandEnvironmentStrings()
И не надо городить никаких специальных функций…
Может я что не понял? :)
Спасибо за указание хорошей функции из ВинАпи, а то из него фиг чего выкопаешь без хорошей доли везения)
Скорее всего перепишу свой плагин с её использованием, а то SHGetFolderPath потащила за собой какую-то непонятную dll ради одной функции.
Наверно ты не понял зачем нужна функция AnsiString GetConfigDir()
Дело в том что при указании клиенту комфорта ключа "-cfg_*" настройки чата переползают из %APPDATA% в папку с комфортом. Вы привели пример получения пути к main.ini, но при указании ключа (для запуска 2-х копий чата с разными настройками) Ваша версия не будет работать правильно.
Аватара пользователя
DIGGER
Сообщения: 264
Зарегистрирован: 13:46, 15.05.2009

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

Сообщение DIGGER »

Slayter,
>>Наверно ты не понял зачем нужна функция AnsiString GetConfigDir()
Недоглядел, каюсь.

>>Дело в том что при указании клиенту комфорта ключа "-cfg_*" настройки чата переползают из %APPDATA% в папку с комфортом.
вот накопал:
Maxim Mirgorodsky писал(а):Ключ — «-cfg_%TEXT%», где %TEXT% — любой текст (можно название сервера). Все конфигурационные данные и логи будут сохраняться в папку AppData_%TEXT%.
Значит сделаем и себе функцию поиска пути к конфигу комфорта :)
Спасибо за информацию.

:arrow: func GetConfigDir() тоже не правильно работает: нужно учитывать папку пользователя, например: %AppData_cfg%\Config\Accounts\%UserChatName%\

Maxim Mirgorodsky, пожалуйста, внесите ясность: Где плугинам и по какому алгоритму хранить свои файлы?
Maxim Mirgorodsky
Администратор
Сообщения: 6869
Зарегистрирован: 09:56, 27.06.2005

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

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

В 4.40 сделаем функцию для получения пути.
Аватара пользователя
VIRUS
Сообщения: 174
Зарегистрирован: 13:15, 23.11.2008

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

Сообщение VIRUS »

Я например конфиг-файл INI нахожу так GetCurrentDir()+"\\config.ini";. Функция GetCurrentDir возвращает путь текущей папки плагина (не принимает параметры). Она есть в Delphi и Borland C++. Есть еще функция

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

GetCurrentDirectory
(
	DWORD nBufferLength,	// размер буфера
	LPTSTR lpBuffer		// указатель на буфер
);
Последний раз редактировалось VIRUS 23:07, 18.11.2009, всего редактировалось 2 раза.
Пользователь думает, что в килобайте 1000 байт, а программист думает, что в километре 1024 метра.
Аватара пользователя
DIGGER
Сообщения: 264
Зарегистрирован: 13:46, 15.05.2009

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

Сообщение DIGGER »

VIRUS писал(а):Я например конфиг-файл INI нахожу так GetCurrentDir()+"\\config.ini";. Функция GetCurrentDir возвращает путь текущей папки плагина (не принимает параметры).
А если я в своём плагине использую SetCurrentDir()? :) Твой плагин начнёт сохранять настройки где попало))
Так что ждём CommFort API … Тем более ждать совсем не долго.
Аватара пользователя
VIRUS
Сообщения: 174
Зарегистрирован: 13:15, 23.11.2008

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

Сообщение VIRUS »

А если я в своём плагине использую SetCurrentDir()? :) Твой плагин начнёт сохранять настройки где попало))
Вообще не понял, что ты имел ввиду. Причем тут мой плагин? Причем функции твоего?
Пользователь думает, что в килобайте 1000 байт, а программист думает, что в километре 1024 метра.
Аватара пользователя
-=SJ=-
Сообщения: 246
Зарегистрирован: 02:21, 06.04.2007

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

Сообщение -=SJ=- »

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

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

Сообщение DIGGER »

-=SJ=-, совершенно верно! Могу только добавить: эффект запросто может оказаться плавающим! Потому с [S/G]etCurrentDir() лучше не баловаться без крайней необходимости. Или же проводить какие-то дополнительные проверки.
Аватара пользователя
VIRUS
Сообщения: 174
Зарегистрирован: 13:15, 23.11.2008

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

Сообщение VIRUS »

Ну да, код из DLL же "вставляется" в адресное пространство процесса (чата). Возможно, что при использовании данных функций (собенно SetCurrentDirectory()) непредсказуемые ситуации. Тогда вы -=SJ=- и DIGGER правы. Не подумал об этом. Maxim Mirgorodsky в новой версии чата будут новые команды для плагинов (например возможность редактировании объявлений и т.д.)?
Пользователь думает, что в килобайте 1000 байт, а программист думает, что в километре 1024 метра.
Аватара пользователя
DIGGER
Сообщения: 264
Зарегистрирован: 13:46, 15.05.2009

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

Сообщение DIGGER »

Уже отвечали:
Maxim Mirgorodsky писал(а):В 4.40 сделаем функцию для получения пути.
Аватара пользователя
VIRUS
Сообщения: 174
Зарегистрирован: 13:15, 23.11.2008

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

Сообщение VIRUS »

DIGGER писал(а):Уже отвечали:
Maxim Mirgorodsky писал(а):В 4.40 сделаем функцию для получения пути.
[удалено как офтопик] я задал вопрос про новые команды, а не про функции Commfort API.
Пользователь думает, что в килобайте 1000 байт, а программист думает, что в километре 1024 метра.
Аватара пользователя
DIGGER
Сообщения: 264
Зарегистрирован: 13:46, 15.05.2009

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

Сообщение DIGGER »

VIRUS, пользуйтесь кнопочкой ЛС, если хотите что бы никто "не мешал" Вам общаться с одним человеком! Так как это форум! Как Вы писали недавно:
VIRUS писал(а):… Читаем вот это: "Что такое чат?" и вот это "Что такое форум?"
Вот и почитайте! :evil:
Аватара пользователя
VIRUS
Сообщения: 174
Зарегистрирован: 13:15, 23.11.2008

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

Сообщение VIRUS »

Не пойму в чем прокол. Пишу одного бота. Использую среду CodeGear 2007. Сообщения из чата принимаются. Но почему они не отправляются? Вот в чем проблема.

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


// [b]Функция принятия пакета данных[/b]

void __fastcall TForm1::UDPServerUDPRead(TObject *Sender, TBytes AData,
	  TIdSocketHandle *ABinding)
{
	if (!UDPClient->Active)
		{
			UDPClient->Port=ABinding->PeerPort; // устанавливаем порт по первому принятому пакету для отправки данных
			UDPClient->Active=true; // активируем компонет UDPClient
		}
}

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


// [b]Функция для отправки данных[/b]

void __fastcall TForm1::Button1Click(TObject *Sender)
{
	TStringStream* msg=OutMsgToChannel(50,"test","HELLO"); // формируем данные для отправки

	TIdBytes mas;
	mas.set_length(msg->DataString.Length()); // устанавливаем длину массива

	memcpy(&mas[0],msg->DataString.c_str(),msg->DataString.Length()); // копируем массив в другой массив

	UDPClient->SendBuffer(mas); // отправляем массив
}
В функции для отправки данных я проверил правильность сформированого массива
Изображение

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

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

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

Maxim Mirgorodsky в новой версии чата будут новые команды для плагинов (например возможность редактировании объявлений и т.д.)?
Не планируются (кроме получения пути к папке для хранения своих файлов).
Закрыто