Страница 26 из 42
Re: Технология создания плагинов и программ-дополнений
Добавлено: 23:36, 14.11.2009
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 получаем полный путь к файлу настроек чата.

Любые другие пути к папкам чата получаем по аналогии с примером выше.
И не надо городить никаких специальных функций…
Может я что не понял?

Re: Технология создания плагинов и программ-дополнений
Добавлено: 08:58, 16.11.2009
Slayter
DIGGER писал(а):Внесу свои 5 копеек:
Юзаю
MASM и
WinAPI ExpandEnvironmentStrings()
И не надо городить никаких специальных функций…
Может я что не понял?

Спасибо за указание хорошей функции из ВинАпи, а то из него фиг чего выкопаешь без хорошей доли везения)
Скорее всего перепишу свой плагин с её использованием, а то
SHGetFolderPath потащила за собой какую-то непонятную dll ради одной функции.
Наверно ты не понял зачем нужна функция AnsiString GetConfigDir()
Дело в том что при указании клиенту комфорта ключа "-cfg_*" настройки чата переползают из %APPDATA% в папку с комфортом. Вы привели пример получения пути к main.ini, но при указании ключа (для запуска 2-х копий чата с разными настройками) Ваша версия не будет работать правильно.
Re: Технология создания плагинов и программ-дополнений
Добавлено: 10:43, 17.11.2009
DIGGER
Slayter,
>>Наверно ты не понял зачем нужна функция AnsiString GetConfigDir()
Недоглядел, каюсь.
>>Дело в том что при указании клиенту комфорта ключа "-cfg_*" настройки чата переползают из %APPDATA% в папку с комфортом.
вот накопал:
Maxim Mirgorodsky писал(а):Ключ — «-cfg_%TEXT%», где %TEXT% — любой текст (можно название сервера). Все конфигурационные данные и логи будут сохраняться в папку AppData_%TEXT%.
Значит сделаем и себе функцию поиска пути к конфигу комфорта

Спасибо за информацию.

func
GetConfigDir() тоже не правильно работает: нужно учитывать папку пользователя, например: %AppData_cfg%\Config\Accounts\
%UserChatName%\
Maxim Mirgorodsky, пожалуйста, внесите ясность: Где плугинам и по какому алгоритму хранить свои файлы?
Re: Технология создания плагинов и программ-дополнений
Добавлено: 15:26, 17.11.2009
Maxim Mirgorodsky
В 4.40 сделаем функцию для получения пути.
Re: Технология создания плагинов и программ-дополнений
Добавлено: 11:42, 18.11.2009
VIRUS
Я например конфиг-файл INI нахожу так GetCurrentDir()+"\\config.ini";. Функция GetCurrentDir возвращает путь текущей папки плагина (не принимает параметры). Она есть в Delphi и Borland C++. Есть еще функция
Код: Выделить всё
GetCurrentDirectory
(
DWORD nBufferLength, // размер буфера
LPTSTR lpBuffer // указатель на буфер
);
Re: Технология создания плагинов и программ-дополнений
Добавлено: 20:20, 18.11.2009
DIGGER
VIRUS писал(а):Я например конфиг-файл INI нахожу так GetCurrentDir()+"\\config.ini";. Функция GetCurrentDir возвращает путь текущей папки плагина (не принимает параметры).
А если я в своём плагине использую
SetCurrentDir()?

Твой плагин начнёт сохранять настройки где попало))
Так что ждём
CommFort API … Тем более ждать совсем не долго.
Re: Технология создания плагинов и программ-дополнений
Добавлено: 21:33, 18.11.2009
VIRUS
А если я в своём плагине использую SetCurrentDir()?

Твой плагин начнёт сохранять настройки где попало))
Вообще не понял, что ты имел ввиду. Причем тут мой плагин? Причем функции твоего?
Re: Технология создания плагинов и программ-дополнений
Добавлено: 22:05, 18.11.2009
-=SJ=-
VIRUS писал(а):Вообще не понял, что ты имел ввиду. Причем тут мой плагин? Причем функции твоего?
При том, что текущая директория является текущей для всего приложения, и если один из плагинов изменит текущую директорию, то для остальных плагинов она также изменится.
Re: Технология создания плагинов и программ-дополнений
Добавлено: 22:20, 18.11.2009
DIGGER
-=SJ=-, совершенно верно! Могу только добавить: эффект запросто может оказаться плавающим! Потому с [S/G]etCurrentDir() лучше не баловаться без крайней необходимости. Или же проводить какие-то дополнительные проверки.
Re: Технология создания плагинов и программ-дополнений
Добавлено: 22:55, 18.11.2009
VIRUS
Ну да, код из DLL же "вставляется" в адресное пространство процесса (чата). Возможно, что при использовании данных функций (собенно SetCurrentDirectory()) непредсказуемые ситуации. Тогда вы -=SJ=- и DIGGER правы. Не подумал об этом. Maxim Mirgorodsky в новой версии чата будут новые команды для плагинов (например возможность редактировании объявлений и т.д.)?
Re: Технология создания плагинов и программ-дополнений
Добавлено: 05:21, 19.11.2009
DIGGER
Уже отвечали:
Maxim Mirgorodsky писал(а):В 4.40 сделаем функцию для получения пути.
Re: Технология создания плагинов и программ-дополнений
Добавлено: 10:29, 19.11.2009
VIRUS
DIGGER писал(а):Уже отвечали:
Maxim Mirgorodsky писал(а):В 4.40 сделаем функцию для получения пути.
[удалено как офтопик] я задал вопрос про новые команды, а не про функции Commfort API.
Re: Технология создания плагинов и программ-дополнений
Добавлено: 13:53, 19.11.2009
DIGGER
VIRUS, пользуйтесь кнопочкой
ЛС, если хотите что бы никто "не мешал" Вам общаться с
одним человеком! Так как это форум! Как Вы писали недавно:
Вот и почитайте!

Re: Технология создания плагинов и программ-дополнений
Добавлено: 16:03, 19.11.2009
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); // отправляем массив
}
В функции для отправки данных я проверил правильность сформированого массива
Функцию для приема данных я тоже проверил

Re: Технология создания плагинов и программ-дополнений
Добавлено: 18:07, 19.11.2009
Maxim Mirgorodsky
Maxim Mirgorodsky в новой версии чата будут новые команды для плагинов (например возможность редактировании объявлений и т.д.)?
Не планируются (кроме получения пути к папке для хранения своих файлов).