[релиз] IcqMod DLL

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by slesh, 28 Nov 2009.

  1. Retimiled

    Retimiled Banned

    Joined:
    23 Dec 2009
    Messages:
    110
    Likes Received:
    17
    Reputations:
    0
    dll - не демковая 8))
     
  2. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    bugfix

    IcqMod.cpp строка 154 столбец 89

    if (recv(sock, (char*)&s4, sizeof(S4_REQ), 0) != sizeof(S4_REQ) || s4.command != 91)

    FIX:
    Code:
    if (recv(sock, (char*)&s4, sizeof(S4_REQ), 0) != sizeof(S4_REQ) || s4.command != 90)
    ;)
     
    _________________________
  3. WAYS

    WAYS New Member

    Joined:
    12 Nov 2008
    Messages:
    36
    Likes Received:
    0
    Reputations:
    0
    Возможно ли использовать под .NET?
     
  4. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    да.
    Советую прочитать про атрибут DllImport, а так же про unmanagement code
     
  5. WAYS

    WAYS New Member

    Joined:
    12 Nov 2008
    Messages:
    36
    Likes Received:
    0
    Reputations:
    0
    А можно пример любой функции?, запутался в типах :(
     
  6. vitaliy-den

    vitaliy-den Member

    Joined:
    2 Dec 2009
    Messages:
    0
    Likes Received:
    5
    Reputations:
    5
    Спасибо тебе slesh!
    То что нужно нашел)
     
  7. s4m5

    s4m5 New Member

    Joined:
    6 Oct 2010
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    решение отличное, но вот пытаюсь законнектиться через прокси:
    Code:
    var
      cl : ICQ_CLIENT;
     clp: PPROXY_INFO;
    
    ................
    
    clp.ProxyType:=PROXY_TYPE_SOCKS_5;
    clp.ProxyIp:= inet_addr('10.0.0.20');
    clp.ProxyPort:=1080;
              if ICQConnect(cl, 'login.icq.com', 5190, UINLogin, UINPass, clp) = ICQ_CONNECT_STATUS_OK then
    
    не соннектится, в чем могет быть причина? или может я чтонить не прально делаю?
     
  8. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Делфи надо тебе сначало подучить.
    не clp: PPROXY_INFO; а clp: PROXY_INFO;
    и ... UINPass, @clp)

    А то, что ты написал вообще может крах программы вызвать потому как ты работал с указателем как с обычной структурой да и к томуже не выделял память под него
     
  9. s4m5

    s4m5 New Member

    Joined:
    6 Oct 2010
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    делфи подучу.

    то что ты поправил, не помогло не коннектится
     
  10. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    А что именно за код ошибки показывает?
    Может у тебя адрес Socks5 сервера не правильный? или может он требует авторизацию?
     
  11. Самовар

    Joined:
    15 Jun 2009
    Messages:
    219
    Likes Received:
    13
    Reputations:
    0
    dll работает?
    вроде с момента как выложили протокол поменялся.
    P.S. лень проверять
     
  12. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Только что проверил. Всё пашет отлично.
    Вот пример без прокси:
    Консольный бот который говорит текущее время на !TIME

    Консольная прожка
    Code:
    program TimeBot;
    
    {$APPTYPE CONSOLE}
    
    uses
      SysUtils, windows,
      IcqMod in 'IcqMod.pas';
    
    const
      login = 'UIN';
      pass = 'ПАРОЛЬ';
    
    
    function ToOEM(const S: string):string;
    var
      NewStr: string;
    begin
      SetLength(NewStr, Length(S));
      CharToOem(PChar(S), PChar(NewStr));
      result := NewStr;
    end;
    
    
    var
      cl : ICQ_CLIENT;
      len : integer;
      MSG : array[0..4096] of char;
      UIN : array[0..9] of char;
      st : SYSTEMTIME;
    begin
      writeln('Start Bot');
      if ICQConnect(cl, 'login.icq.com', 5190, login, pass, nil) = ICQ_CONNECT_STATUS_OK then
      begin
        writeln('Conect Ok');
        while cl.status = ICQ_CLIENT_STATUS_CONNECTED do
        begin
          if ICQReadMsg(cl, UIN, MSG, len) = 1 then
          begin
            writeln('UIN:' + UIN + ' MSG = ' + ToOEM(MSG));
            if MSG = '!TIME' then
            begin
              GetLocalTime(st);
              ICQSendMsg(cl, UIN, pchar(inttostr(st.wHour) + ':' + inttostr(st.wMinute) + ':' + inttostr(st.wSecond)));
            end
            else
            begin
              ICQSendMsg(cl, UIN, 'This is test program. IcqMod.dll funct');
            end;
          end;
          sleep(100);
        end;
        writeln('Disconnect');
      end
      else
      begin
        writeln('Conect Error');
      end;
    end.
    
    IcqMod.pas:
    Code:
    unit IcqMod;
    
    interface
    
    uses windows;
    
    const
      ICQMOD_DLL = 'IcqMod.dll';
    
      PROXY_TYPE_SOCKS_4 = 1;
      PROXY_TYPE_SOCKS_5 = 2;
    
      ICQ_CONNECT_STATUS_OK	= $FFFFFFFF;
      ICQ_CONNECT_STATUS_RECV_ERROR	= $FFFFFFFE;
      ICQ_CONNECT_STATUS_SEND_ERROR = $FFFFFFFD;
      ICQ_CONNECT_STATUS_CONNECT_ERROR = $FFFFFFFC;
      ICQ_CONNECT_STATUS_AUTH_ERROR = $FFFFFFFB;
    
      ICQ_CLIENT_STATUS_CONNECTED = 1;
      ICQ_CLIENT_STATUS_DISCONNECTED = 2;
    
    
    type
      PROXY_INFO = packed record
        ProxyType : dword;
        ProxyIp : dword;
      	ProxyPort : word;
      end;
      PPROXY_INFO = ^PROXY_INFO;
    
      ICQ_CLIENT = packed record
        status : byte;
        sequence : word;
        sock : dword;
      end;
    
      function ICQConnect(var client : ICQ_CLIENT; host : PAnsichar; port : word; login : PAnsichar; pass : PAnsichar; pproxy : PPROXY_INFO) : dword; stdcall; external ICQMOD_DLL;
      function ICQReadMsg(var client : ICQ_CLIENT; UIN : PAnsichar; msg : PAnsichar; var msglen : integer) : dword; stdcall; external ICQMOD_DLL;
      function ICQAuth(var client : ICQ_CLIENT; UIN : PAnsichar; AuthOk : dword) : dword; stdcall; external ICQMOD_DLL;
      procedure ICQClose(var client : ICQ_CLIENT); stdcall; external ICQMOD_DLL;
      function ICQSendAuth(var client : ICQ_CLIENT; UIN : PAnsichar; msg : PAnsichar) : dword; stdcall; external ICQMOD_DLL;
      function ICQSendMsg(var client : ICQ_CLIENT; UIN : PAnsichar; msg : PAnsichar) : dword; stdcall; external ICQMOD_DLL;
    
    
    implementation
    
    
    
    
    end.
    
    
     
  13. s4m5

    s4m5 New Member

    Joined:
    6 Oct 2010
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    скинь пожалста пример с использованием прокси, для таких нубов как я
     
  14. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    ну пля, что так сложно вписать пару строк? я уже объяснил что делать.
    Code:
    uses ****, winsock;
    ******
    var
    **********
     pi : PROXY_INFO;
    *********
    begini
      pi.ProxyType := PROXY_TYPE_SOCKS_5;
      pi.ProxyPort := 1245;
      pi.ProxyIp := inet_addr('127.0.0.1');
      ************
     if ICQConnect(cl, 'login.icq.com', 5190, login, pass, @pi) = ICQ_CONNECT_STATUS_OK then
     ***********
    end;
    
     
  15. s4m5

    s4m5 New Member

    Joined:
    6 Oct 2010
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    сенкс, все именно так и сделал, не коннектится, дело втом,что я выхожу в инет через проксю http (сижу за натом), и еще поднят socks5, ася коннектится отлично.
     
  16. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    ну это уже изза настроек твоего прокси зависит. потому что часто аська через SSL пролазеет. Или скорее всего у тебя авторизация на прокси нужна
     
  17. s4m5

    s4m5 New Member

    Joined:
    6 Oct 2010
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    неа авторизации нет никакой потому,что я сам его поднимал (прокси).
     
  18. PAXAn

    PAXAn Elder - Старейшина

    Joined:
    14 Jun 2008
    Messages:
    43
    Likes Received:
    3
    Reputations:
    0
    помогите плз подключить эту dll на с++. пол дня промучался и нефига не выходит.
    подключаю её статически, с помощью dll2lib создал lib файл, кинул его вместе с .h файлом в папку с проектом, подключился к проекту и теперь он ругаеться на все типы данных.(ULONG, BYTE)

    что делать? в си я не очень хорошо разбираюсь.=(
     
  19. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    ULONG, BYTE - это из модуля windows.h
    Это я для удобства так пишу их. а так ты можешь заменить их на
    unsigned long и unsigned char

    Ну или сразу их ручками объявить

    typedef unsigned char BYTE;
    typedef unsigned long ULONG;
     
    #39 slesh, 26 Nov 2010
    Last edited: 26 Nov 2010
  20. PAXAn

    PAXAn Elder - Старейшина

    Joined:
    14 Jun 2008
    Messages:
    43
    Likes Received:
    3
    Reputations:
    0

    получил такую байду=( впринципе я её же получал когда вместо этих типов указывал обычные long и short.
    попробовал заменить все _stdcall на__clrcall не помогло, ошибок стало только больше=(
    что делать?
    и еще вопрос..а если её попробовать все таки динамически подключить, как это сделать(просто я не знаю еще как получать там указатели на функции и их использовать)

    *надеюсь я тебя не сильно напрягаю своими проблемами;-)