Технология создания плагинов и программ-дополнений
Re: Технология создания плагинов и программ-дополнений
Еще одно очень важное пожелание для клиентских плагинов - добавить возможность самоидентификации плагином, т.е. возможность узнать под какой учетной записью клиент с установленным плагином подключен к чату.
Re: Технология создания плагинов и программ-дополнений
Скачал null плагин для версии 4.10. В нем написан такой комментарий "//Если снять комментарий ниже, то все сообщения..." я снял необходимый комментарий:
вот тут /*if(dwMessageID==0)
{
bMessage[0]='x';
bMessage[1]='x';
bMessage[2]='x';
...................................
(*dwMessageLength) = 3;
return TRUE;
} */ и тут
Но плагин все равно не работает. Среду разработки я использую Borland C++ 6.0. Подскажите где ошибка.
вот тут /*if(dwMessageID==0)
{
bMessage[0]='x';
bMessage[1]='x';
bMessage[2]='x';
...................................
(*dwMessageLength) = 3;
return TRUE;
} */ и тут
Но плагин все равно не работает. Среду разработки я использую Borland C++ 6.0. Подскажите где ошибка.
Пользователь думает, что в килобайте 1000 байт, а программист думает, что в километре 1024 метра.
-
- Администратор
- Сообщения: 6877
- Зарегистрирован: 09:56, 27.06.2005
Re: Технология создания плагинов и программ-дополнений
Проблема, скорее всего, в настройках среды разработки (и проекта).
Но плагин все равно не работает.
Нужна подробная информация: что именно не работает.
Но плагин все равно не работает.
Нужна подробная информация: что именно не работает.
Re: Технология создания плагинов и программ-дополнений
Вот такая причина. После того как я скачал проект и убрал коментарии я его скомпилировал. Получилась DLL-библиотека, я взял эту библиотеку и дал ей имя plug1 и поменял расширение с dll на cfsplug. Поместил этот файл в папку Plugins что на сервере. Запускаю сервер и чат и... виртуальный пользователь не подключен. Может это и среда разработки виноватая так как Вы использовали (я так думаю) Borland Developer Studio 2006, а я Borland C++ Builder 6.0. Но эти среды разработки - это одно то самое (только версии другие) и проекты, которые написаны в Borland Developer Studio идут на Borland C++ Builder 6.0 и на оборот.
Пользователь думает, что в килобайте 1000 байт, а программист думает, что в километре 1024 метра.
-
- Администратор
- Сообщения: 6877
- Зарегистрирован: 09:56, 27.06.2005
Re: Технология создания плагинов и программ-дополнений
Убедитесь, что использовуется соглашение _stdcall и что отключено декорирование имен экспортируемых функций (ссылка на статью содержащую информацию как это сделать в разных средах программирования была в этой теме ранее).
Re: Технология создания плагинов и программ-дополнений
Я подключил директиву __stdcall и все заработало. Спасибо также Вам за то, что дали ссылку на сайт www.progz.ru. Там я нашел все что нужно об DLL библиотеках. У меня возник один вопрос. Почему Вы в своем примере заранее не подключили директиву __stdcall для всех функций?
Пользователь думает, что в килобайте 1000 байт, а программист думает, что в километре 1024 метра.
-
- Администратор
- Сообщения: 6877
- Зарегистрирован: 09:56, 27.06.2005
Re: Технология создания плагинов и программ-дополнений
В настройках проекта установлен именно вызов "__stdcall" (видимо, при портировании на BCB6 эта настройка не сохранилась).
- ~LONSDALE~
- Сообщения: 145
- Зарегистрирован: 14:38, 09.03.2008
- Контактная информация:
Re: Технология создания плагинов и программ-дополнений
Доброе время суток.
Поделитесь исходниками на delphi если есть у каво.
Поделитесь исходниками на delphi если есть у каво.
Re: Технология создания плагинов и программ-дополнений
[Cообщeние yдалено]
Последний раз редактировалось dv 08:10, 29.06.2012, всего редактировалось 1 раз.
Дополнения для CommFort
Адрес чата: chat.telered.ru
.
Адрес чата: chat.telered.ru
.
Re: Технология создания плагинов и программ-дополнений
Товарищи программисты. Тут решил на днях освоить плагины. Вопрос на засыпку для тех кто писал плагины с примера который выложил автор этого чата. Кстати, те которые не знают С++ лучше не отвечайте на данный вопрос. Не могу понять, даже логики никакой нет, вот нужно мне файл предположим file001.dat прочитать построчно. Ну я сделал как всегда( это относится все к функции Premoderation):
TStringList*kol=new TStringList; //динамически выделил память
kol->LoadFromFile("file001.dat"); //через указатель обратился к файлу
for (int i=0;i<kol->Count;i++) // тут в цикле прочитал строки
s=kol->Strings;
Не могу понять одного. Когда, например, я это все пишу перед оператором
if (dwMessageID==0){...}, тогда плагин вообще отказывается работать, и ничего с файла не читает и в чат ничего не выводит. Может я что-то пропустил, может не доглядел. Подскажите пожалуйста.
TStringList*kol=new TStringList; //динамически выделил память
kol->LoadFromFile("file001.dat"); //через указатель обратился к файлу
for (int i=0;i<kol->Count;i++) // тут в цикле прочитал строки
s=kol->Strings;
Не могу понять одного. Когда, например, я это все пишу перед оператором
if (dwMessageID==0){...}, тогда плагин вообще отказывается работать, и ничего с файла не читает и в чат ничего не выводит. Может я что-то пропустил, может не доглядел. Подскажите пожалуйста.
Пользователь думает, что в килобайте 1000 байт, а программист думает, что в километре 1024 метра.
Re: Технология создания плагинов и программ-дополнений
VIRUS писал(а):Товарищи программисты. Тут решил на днях освоить плагины. Вопрос на засыпку для тех кто писал плагины с примера который выложил автор этого чата. Кстати, те которые не знают С++ лучше не отвечайте на данный вопрос. Не могу понять, даже логики никакой нет, вот нужно мне файл предположим file001.dat прочитать построчно. Ну я сделал как всегда( это относится все к функции Premoderation):
TStringList*kol=new TStringList; //динамически выделил память
kol->LoadFromFile("file001.dat"); //через указатель обратился к файлу
for (int i=0;i<kol->Count;i++) // тут в цикле прочитал строки
s=kol->Strings;
Не могу понять одного. Когда, например, я это все пишу перед оператором
if (dwMessageID==0){...}, тогда плагин вообще отказывается работать, и ничего с файла не читает и в чат ничего не выводит. Может я что-то пропустил, может не доглядел. Подскажите пожалуйста.
так не только в цпп, на делфи когда пробовал написать плагин, с функцией премодерации также было
-
- Администратор
- Сообщения: 6877
- Зарегистрирован: 09:56, 27.06.2005
Re: Технология создания плагинов и программ-дополнений
Не могу точно подсказать причину проблемы, но могу сказать что загрузка файла при каждом запросе на премодерацию спровоцирует чудовищное потребление системных ресурсов, так делать категорически нельзя.
Re: Технология создания плагинов и программ-дополнений
Все таки я разобрался в чем была проблема того, что файл не читался, оказывается в BCB 6.0 есть маленький сюрприз путь к файлу нужно прописывать полный и в таком формате:
TStringList*kol=new TStringList;
kol->LoadFromFile("C:\\plagin\\file001.dat");
Вот и все . Долго я хелп листал . Кстати я с вами согласен, что лучше не открывать по сто раз файл. Это я уже исправил.
TStringList*kol=new TStringList;
kol->LoadFromFile("C:\\plagin\\file001.dat");
Вот и все . Долго я хелп листал . Кстати я с вами согласен, что лучше не открывать по сто раз файл. Это я уже исправил.
Пользователь думает, что в килобайте 1000 байт, а программист думает, что в километре 1024 метра.
Re: Технология создания плагинов и программ-дополнений
Не могу разобраться как правильно отправлять сообщение от плагина к клиенту (серверный плагин). В функции PluginProcess расположен вызов функции через указатель (*CommFortProcess)(dwPluginID,20,aMessageToSend.c_str(),aMessageToSend.Length()) для отправки сообщения программе. Как правильно через неё послать сообщение? Я убирал коментарии и переменной aMessageToSend присваивал строку например aMessageToSend="test". Но ничего не происходит. Подскажите пожалуйста. Как правильно с этой функцией (для отправки сообщений) работать.
Пользователь думает, что в килобайте 1000 байт, а программист думает, что в километре 1024 метра.
-
- Администратор
- Сообщения: 6877
- Зарегистрирован: 09:56, 27.06.2005
Re: Технология создания плагинов и программ-дополнений
Необходимо просто ее вызывать с необходимыми параметрами (не забудьте указывать верный dwPluginID, полученный при инициализации).