нагибаем AOL/MSN ВОЛЬФ ДАНИЯР AKA PAYHASH Спецвыпуск: Хакер, номер #063, стр. 063-108-5 //Процедура подключения к ICQ-серверу после события нажатия кнопки. procedure Button1Click(Sender: TObject); //Процедура на проверку входящих сообщений. procedure Timer1Timer(Sender: TObject); //procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; //Подключаем DLL в проект и объявляем DLL функции. В Delphi это делаем таким не //хитрым образом: implementation procedure icq_activate_connect(uin:string; passw:string; icqserver:string; port:integer); stdcall; external 'icqkid.dll' procedure icq_msg_put(duin:string; sendmsg:shortstring); stdcall; external 'icqkid.dll' procedure icq_msg_get(ruin, msg: PChar); stdcall; external 'icqkid.dll' {$R *.DFM} //Описание процедуры на событие нажатой кнопки procedure TForm1.Button1Click(Sender: TObject); //Тело процедуры подключения к ICQ-серверу. begin //Функция из DLL, первый аргумент — это номер ICQ, второй аргумент — это пароль //твоего ICQ-номера, третий аргумент — это адрес ICQ-сервера, четвертый аргумент — это //порт ICQ-сервера. icq_activate_connect('123456', 'XXXXXXX', 'login.icq.com', 5190); Memo1.Lines.Add('Connected :]'); Timer1.Enabled := True; end; //procedure TForm1.Button2Click(Sender: TObject); //begin //icq_msg_put('654321', 'visit www.icqkid.com'); //Memo1.Lines.Add('Message send'); //end; //Обработчик входящих ICQ-сообщений. procedure TForm1.Timer1Timer(Sender: TObject); var //Объявляем два строковых указателя: номер отправителя и ICQ-сообщение. ruin,msg:PChar; begin //Выделяем место в памяти по 512 байт соответственно для этих двух аргументов. GetMem(ruin, 512); GetMem(msg, 512); Try //DLL-функция на предмет входящих сообщений, в которых параметрами являются наши //два аргумента. icq_msg_get(ruin, msg); Memo1.Lines.Add(ruin+' '+msg); //Memo1.Lines.Add('msg'+ msg); finally //Высвобождаем память, выделенную под аргументы. FreeMem(ruin); FreeMem(msg); end; end; end. Сохраняем наш проект в рабочий каталог, затем скопируем файл icqkid.dll в каталог с сохраненным проектом или в системную папку windows (как показано на рис. 2). Теперь билдим наш проект, нажав на заветную зелененькую кнопочку Run, или жмем <F9>. На С (Borland C 5.5) эти действия выглядели бы так, как показано в листинге №2: листинг №2: исходный код на С (с использованием icqkid.dll) #include <windows.h> #ifndef ADD_DLL_H #define ADD_DLL_H #ifdef __cplusplus extern "C" #endif //Function the activate connection with ICQ server int __declspec(dllimport) WINAPI icq_activate_connect(const char *uin, const char *password, const char *loginserver, WORD icqport); //The status function void __declspec(dllimport) WINAPI icq_add_status(const char *status); //Receive ICQ message function void __declspec(dllimport) WINAPI icq_msg_get(char *ruin, char *msg); //Send ICQ message function int __declspec(dllimport) WINAPI icq_msg_put(char *duin, char *sendmsg, int putmsglen); #endif main() { static char ruin[9]; static char msg[512]; |