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)
решение отличное, но вот пытаюсь законнектиться через прокси: 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 не соннектится, в чем могет быть причина? или может я чтонить не прально делаю?
Делфи надо тебе сначало подучить. не clp: PPROXY_INFO; а clp: PROXY_INFO; и ... UINPass, @clp) А то, что ты написал вообще может крах программы вызвать потому как ты работал с указателем как с обычной структурой да и к томуже не выделял память под него
А что именно за код ошибки показывает? Может у тебя адрес Socks5 сервера не правильный? или может он требует авторизацию?
Только что проверил. Всё пашет отлично. Вот пример без прокси: Консольный бот который говорит текущее время на !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.
ну пля, что так сложно вписать пару строк? я уже объяснил что делать. 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;
сенкс, все именно так и сделал, не коннектится, дело втом,что я выхожу в инет через проксю http (сижу за натом), и еще поднят socks5, ася коннектится отлично.
ну это уже изза настроек твоего прокси зависит. потому что часто аська через SSL пролазеет. Или скорее всего у тебя авторизация на прокси нужна
помогите плз подключить эту dll на с++. пол дня промучался и нефига не выходит. подключаю её статически, с помощью dll2lib создал lib файл, кинул его вместе с .h файлом в папку с проектом, подключился к проекту и теперь он ругаеться на все типы данных.(ULONG, BYTE) что делать? в си я не очень хорошо разбираюсь.=(
ULONG, BYTE - это из модуля windows.h Это я для удобства так пишу их. а так ты можешь заменить их на unsigned long и unsigned char Ну или сразу их ручками объявить typedef unsigned char BYTE; typedef unsigned long ULONG;
получил такую байду=( впринципе я её же получал когда вместо этих типов указывал обычные long и short. попробовал заменить все _stdcall на__clrcall не помогло, ошибок стало только больше=( что делать? и еще вопрос..а если её попробовать все таки динамически подключить, как это сделать(просто я не знаю еще как получать там указатели на функции и их использовать) *надеюсь я тебя не сильно напрягаю своими проблемами;-)