Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #63, ФЕВРАЛЬ 2006 г.

нагибаем 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];

Назад на стр. 063-108-4  Содержание  Вперед на стр. 063-108-6