помогите с написанием плагина

Здесь обсуждаются графические оболочки, боты, языковые файлы и другие дополнения к CommFort 4.
Raggamuffin
Сообщения: 37
Зарегистрирован: 00:27, 28.06.2009

помогите с написанием плагина

Сообщение Raggamuffin »

собсно, столкнулся с парой проблем:

1. ошибка при попытке отправить сообщение программе - [28.06.2009 - 1:32:15] Error in plugin 'hЃЂЃёЃ' (code = 1005). Plugin is disactivated.

из-за чего может возникнуть такая ошибка?

2.

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

BYTE PluginProcess(DWORD dwMessageID, BYTE * bMessage, DWORD dwMessageLength) 
{ 
//bMessage - указатель на данные 
в каком виде хранятся эти данные? я попробовал считать строку по тому адресу, что получал, и видел всегда только 1 символ(функцией PeekS()), разный для сообщений разных пользователей.
Изображение
Изображение

ну и сам код:

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

Procedure OpenDebugWindow()
  If OpenWindow(0, 0, 0, 470, 140, "plugin_debug", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ListViewGadget(0, 10, 10, 450, 120)
    SetGadgetState(0, 9)
  EndIf
EndProcedure

Structure sPluginInfo
   strPluginName.s
   strPluginDescription.s
   strPluginVersion.s
EndStructure 

Global dwPluginID.l
Prototype.b ClCommFortProcess(dwPluginID.l, dwMessageID.l, bMessage.s, dwMessageLength.l) 
Prototype.l ClGetData(dwDataID.l, *bBuffer.s, dwBufferSize.l) 
Global CommFortProcess.ClCommFortProcess 
Global CommFortGetData.ClGetData
 
ProcedureDLL PluginInit(dwThisPluginID, *plinfo.sPluginInfo, *func1, *func2)
    dwPluginID = dwThisPluginID
    *plinfo\strPluginName.s = "test"
    *plinfo\strPluginDescription.s = "Test plugin for CommFort client 4.21a"
    *plinfo\strPluginVersion.s = "0.1"  
  CommFortProcess  = func1
  CommGetData = func2
          OpenDebugWindow()
          AddGadgetItem (0, -1, "Plugin initiated. PluginID is "+Str(dwThisPluginID)+".")
 ProcedureReturn 0
 EndProcedure
 
ProcedureDLL PluginTerminate()
  AddGadgetItem (0, -1, "Plugin terminated.")
  CloseWindow(0)
    ProcedureReturn 0
 EndProcedure
 
ProcedureDLL PluginProcess(dwMessageID, *bMessage, dwMessageLength)
  If dwMessageID = 5
      ;debug
      AddGadgetItem (0, -1, "bMessage = "+PeekS(*bMessage)+", adress = "+Str(*bMessage)+", length = "+Str(dwMessageLength))
          aMessageToSend.s = ""
          CommFortProcess(dwPluginID, 50, aMessageToSend, Len(aMessageToSend))    
  EndIf
  ;If dwMessageID = 6
  ;nothing
  ;EndIf
   ProcedureReturn 0
 EndProcedure 
;PureBasic
Raggamuffin
Сообщения: 37
Зарегистрирован: 00:27, 28.06.2009

Re: помогите с написанием плагина

Сообщение Raggamuffin »

up
весь день сижу, не могу понять, что не правильно :( подскажите хотя бы, как правильно отправить сообщение в канал?

всегда получаю сообщение вроде
[29.06.2009 - 0:08:57] Ошибка при обработке плагином "Ё‰А‰ш‰" сообщения с ID=5. Плагин остановлен.
само сообщение принимается, ошибка возникает при попытке ответа на него.
Raggamuffin
Сообщения: 37
Зарегистрирован: 00:27, 28.06.2009

Re: помогите с написанием плагина

Сообщение Raggamuffin »

up

попробовал вызвать функцию напрямую, по указателю -

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

Global *CommFortProcess = *func1
...
CallFunctionFast(*CommFortProcess, 1, 50, aMessageToSend, Len(aMessageToSend))
ошибка та же. ну так, из-за чего она может возникать?
Аватара пользователя
DIGGER
Сообщения: 264
Зарегистрирован: 13:46, 15.05.2009

Re: помогите с написанием плагина

Сообщение DIGGER »

Почитай тут файлик readme.html в архиве.
Аватара пользователя
-=SJ=-
Сообщения: 246
Зарегистрирован: 02:21, 06.04.2007

Re: помогите с написанием плагина

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

Raggamuffin писал(а): aMessageToSend.s = ""
CommFortProcess(dwPluginID, 50, aMessageToSend, Len(aMessageToSend))
Я не знаю этого языка, но судя по всему ты пытаешься отправить пустое сообщение с кодом 50
тогда как сообщение с кодом 50 должно выглядеть так
Опубликовать сообщение в канал - текст(название канала) + текст(сообщение)
Raggamuffin
Сообщения: 37
Зарегистрирован: 00:27, 28.06.2009

Re: помогите с написанием плагина

Сообщение Raggamuffin »

ну так, мне не понятно, в каком конкретно виде отправлять строку? пробовал нечто вроде "main+test", результат тот же.
Аватара пользователя
Modesty
Сообщения: 58
Зарегистрирован: 20:26, 05.05.2008
Откуда: Томск

Re: помогите с написанием плагина

Сообщение Modesty »

Raggamuffin писал(а):ну так, мне не понятно, в каком конкретно виде отправлять строку? пробовал нечто вроде "main+test", результат тот же.
Посмотри как формируют строку тут.
http://www.commfort.com/rus/forum/viewt ... BD.#p28284

И полистай тему "Технология создания плагинов и программ-дополнений" там много интересного :D
Raggamuffin
Сообщения: 37
Зарегистрирован: 00:27, 28.06.2009

Re: помогите с написанием плагина

Сообщение Raggamuffin »

ок,
aMessageToSend:=chr(Length(Channel))+#0#0#0+Channel+chr(Length(Text))+#0#0#0+Text;
#0 это нулевой символ в ASCII?
Аватара пользователя
Modesty
Сообщения: 58
Зарегистрирован: 20:26, 05.05.2008
Откуда: Томск

Re: помогите с написанием плагина

Сообщение Modesty »

Raggamuffin писал(а):#0 это нулевой символ в ASCII?
это ASCII-эквивалент, NULL-символ (нулевой);
Закрыто