В. програмування систем ір-телефонії підручник з дисципліни "Програмування систем ір-телефонії" для всіх спеціальностей напряму Телекомунікації Одеса 2009

Вид материалаДокументы

Содержание


Version = '1.0'
Set path = .\jre\bin,%path
Connstatus online
Подобный материал:
1   2   3   4   5   6   7   8
””.

If Len(s) = 0 Then

Exit Sub

End If

m_objSkype.SendCommand(s) “Відправити команду”

Exit Sub


NoCommand:

MsgBox(Err.Description, MsgBoxStyle.Critical + MsgBoxStyle.OKOnly, “Unable to Send Command”) “Створити вікно з виведенням повідомлення про помилку”.

End Sub


End Class


У Лістингу 3 наведено приклад створення графічного користувацького інтерфейса Skype на мові програмування Perl з використанням пакета ТК і оболонки об’єктів Skype АРІ COM Wrapper. Додаток працює зі зверненням до інструментів пакета PerlТК на платформі GUI Perl.Програма може виконуватись під Windows, Linux, Mac та іншими оболонками при внесенні певних коректив (відносно дзвінків у Skype АРІ).

Для тестування програми слід завантажити і встановити ActivePerl for Windows (MSI), зберегти і встановити оболонку Skype АРІ COM Wrapper: KhaosLabs.com.


Лістинг 3 Вихідний код утиліти Sample Chat Massage

на мові програмування Perl

стр.32 – печатный текст(стр.18- рукописный текст)?

# Perl звертається до модуля Win32:OLE з метою доступу до об’єктів COM Windows.

use Win32::OLE qw(in);


use constant vbCr => “\r”;

# Створити нове вікно, задати його розмір, задати заголовок вікна.


$MW = MainWindow->new;

$MW->geometry(“359x283+8+8”);

init;

MainLoop;


sub build_menubar {


# Створити нову панель меню:
  • створити опції меню File і Help;
  • створити опції підменю для кожного пункта меню; під n, ne, nw, s, sw, se, e, w розуміють напрямки: n – північ, s – південь тощо;
  • text – текст, який відображується на ярлику пункта меню;
  • background – колір тла ярлика;
  • cursor– задає форму курсора миші, припустимі значення задаються функцією Tk_GetCursor;
  • font – шрифт текста на ярлику;
  • foreground – колір шрифту.


# Створити головне меню і кнопки виклику File і Quit.


my $menubar = $MW->Menu;

$MW->configure(-menu => $menubar);

my $file = $menubar->cascade(-label => '~File');

my $help = $menubar->cascade(-label => '~Help', -tearoff => 0);


# Створити підпункти для кожного пункта меню – сперше для пункту меню File:


$file ->command(-label => 'Quit', -command => \&fini);


# Створити підпункти меню Help.


$help->command(-label => 'Version');

$help->separator;

$help->command(-label => 'About');


my_$ver_dialog = $MW->Dialog(-title => 'PaGuX Perl Skype Chat',

-text => 'PaGuX Perl Skype Chat\n\nVersion $VERSION',

-buttons => ['OK'],

-bitmap => 'info');


my $about_dialog = $MW->Dialog(-title => 'PaGuX Perl Skype Chat',

-text => 'PaGuX Perl Skype Chat',

-buttons => ['OK'];


my $menu = $help->cget('-menu ')

$menu->entryconfigure('Version', -command => [$ver_dialog => 'Show']);

$menu->entryconfigure('About', -command => [$about_dialog => 'Show']);


$menubar # return the menu bar


} # end build_menubar


sub build_elements {


# Створення всіх елементів керування форми або головного вікна:
  • ярликів поля;
  • поля введення текстового повідомлення Skype;
  • командної кнопки, від которої передаються команди функції SndMsg.


my $hndl;

my $msg;


# Створення ярлика Label
  • якір – позиція напису на ярлику з відповідними властивостями;
  • n, ne, nw, s, sw, se, e, w напрямки: n – північ, s – південь тощо;
  • text – текст, який відображується на ярлику пункта меню;
  • background – колір тла ярлика;
  • cursor– задає форму курсора миші, припустимі значення задаються функцією Tk_GetCursor;
  • font – шрифт текста на ярлику;
  • foreground – колір шрифту.


my $label = $MW->Label(

-anchor => “w”

-text => “Enter a Skype Handle:”,

-background => “#D4D0C8”,

-cursor => “”,

-font => “Tahoma 9 bold”,

-foreground => “#000077”,

)->pack;


# Визначення місця створеного ярлика за координатами x/y, його висоти та ширини.


$label->place(

-width => 160,

-height => 16,

-x => 8,

-y => 50

);


# Створенння поля введення Entry box (TextBox, InputBox) і перевірка відповідності формату введеного рядка.


…….

my $txtInput = $MW->Entry(

-textvariable => \$hndl,

-borderwidth => 1,

-cursor => “”,

-font => “Tahoma 8 normal”,

-foreground => “#000000”,

-relief => “sunken”

)->pack;


$txtInput->place(

-width => 152,

-height => 24,

-x => 155,

-y => 50

);


my $lblDisplay = $MW->Label(

-anchor => “w”

-text => “Enter your Message :”,

-background => “#D4D0C8”,

-cursor => “”,

-font => “Tahoma 9 bold”,

-foreground => “#000077”,

);

$lblDisplay->place(

-width => 125,

-height => 24,

-x => 8,

-y => 120

);


my $msgInput = $MW->Entry(

-textvariable => \$msg,

-borderwidth => 1,

-cursor => “”,

-font => “Tahoma 8 normal”,

-foreground => “#000000”,

-relief => “sunken”

)->pack;


$msgInput->place(

-width => 135,

-height => 24,

-x => 155,

-y => 120

);


# Створення командної кнопки (CommandButton), за допомогою якої реалізується виклик процедури IsDate Sub:
  • command => Викликає метод sub. sub{sub_name_here(input1, input2)} тощо; може бути один або більше параметрів, або жодного;
  • без аргументів:

command => \&subname

command => sub { … }

command => 'methodname'
  • з аргументами:

command => [ \&subname ?, args …? ]

command => [ sub { … } ?, args …? ]

command => [ 'methodname' ?, args …? ]


my $cmdSndMsg = $MW->Button(

-activebackground => “#FFFCBF”,

-activeforeground => “#E30229”,

-background => “#FFFFFF”,

-borderwidth => 1,

-text => “Send Message”,

-command => sub{SndMsg($hndl,$msg)},

-cursor => “”,

-font => “Tahoma 8 bold”,

-foreground => “#140F7B”,

-relief => “solid”

)->pack;


# Розміщення кнопки.

$cmdSndMsg->place(

-width => 104,

-height => 24,

-x => 170,

-y => 160

);


my $lblError = $MW->Label(

-anchor => “w”

-borderwidth => 1,

-text => “”,

-background => “#FFFFFF”,

-cursor => “”,

-font => “Tahoma 8 normal”,

-relief => “solid”

-highlightbackground => “#000000”,

-justify => “right”,

)->pack;


our $lblError = $MW->Label(

-anchor => “w”

-borderwidth => 1,

-text => “”,

-background => “#D4D0C8”,

-cursor => “”,

-font => “Tahoma 8 normal”,

-justify => “right”,

)->pack;


$lblError->place(

-width => 328,

-height => 44,

-x => 12,

-y => 190

);

}

# Розміщення підциклів; у разі одного підцикла наступний рядок вставляється тільки один раз; у разі багатьох підциклів всі складові розміщуються в середині основного цикла MainLoop.

sub SndMsg() {


# Виклик функції здійснюється у відповідь на натиснення командної кнопки; у рамках функції виконується:
  • отримання покажчика Skype і параметрів повідомлення Maaaessage;

my $txtInput=$_[0];

my $msgInput=$_[1];

  • перевірка параметрів на рівність нулю;


my $error_message = “”;


$error_message .= “Please enter a Skype Handle “ if ( !$txtInput );

$error_message .= “Please specify your Message “ if ( !$msgInput );


if ( $error_message )

{

our $lblError->configure(-text => $error_message );

}

else

{

  • у разі їх відмінності від нуля, створюється новий об’єкт OLE типу SKYPEAPI.Access;


our $lblError->configure(-text => “” );

my $objSkype;

$objSkype = Win32::OLE->new('SKYPEAPI.Access', 'objSkype_');

  • виконання з’єднання зі Skype Network;


$objSkype->Connect();

  • доправляння за допомогою функції Skype API SendMessage текстового повідомлення.


$objSkype->SendMessage($txtInput, $msgInput);

}


}


sub fini {


exit;


} # end fini


sub init


# Ініціювання у рамках даної функції наступних елементів:
  • заголовки та інші змінні;
  • виклик функції build_menubar для створення пункту головного меню;
  • виклик функції build_elements джля створення елементів керування у головному вікні.


$VERSION = '1.0';


$MW->title(“PaGux Perl Skype Chat $VERSION”);


my $menubar = build_menubar;


build_elements;


# my $frame = $MW->Frame(qw/-width 400 –height 350 )->pack;


} # end init


У Лістингу 4 наведено вихідний код утиліти Chat Massage Utility на мові програмування PHP GТK.

Програма утиліти Chat Massage Utility є додаток, в якому одночасно виконується Skype АРІ і мова сценаріїв РНР (Hypertext Preprocessor) на основі міжплатформеного набору інструментів GUI для РНР. Це дозволяє тестувати і запускати програму під оболонками Windows, Linux, Mac та іншими з деякими змінами для реалізації дзвінків Skype API. Для запуску програми треба встановити на комп’ютері під ОС Windows ХР php-gtk for Windows, завантажити і встановити Skype АРІ COM Wrapper. Сама програма запускається з директорії у вигляді файла php phpforskype.php.


Лістинг 4 Вихідний код утиліти Chat Massage

Utility на мові програмування PHP GТK

стр.40 – печатный текст(стр.21- рукописный текст)

/* Умова if визначає місце знаходження відповідного файла для запуску програми gtk. Код написано під Windows.*/

if (!class_exists('gtk'))

{

if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN')

dl('php_gtk.dll');

else

dl('php_gtk.so');

}

/* Функція реалізує закриття вікна; значення функції за умовчанням – false.*/

function delete_event()

{

return false;

}

/* Треба вчасно вилучати будь-які запущені елементи РНР.*/

function delete_event()

{

Gtk::main_quit()

}

/* Об’єкту класу entry привласнюється вміст текстового поля і зберігається у $gettext, після чого значення параметрів передаються функції SendMessage.*/

function send_message($label, $entry, $message)

{

$gethandle = $entry->get_text();

$getmessage = $message->get_text();


if((strlen($gethandle))==0 | | (strlen($getmessage))==0)

{

$sentmsg =”Handle or Message cannot be empty, pl fill

it”;

$label->set_text($senttmsg);

}else

{

/* Створено новий примірник СОМ об’єкта SKYPEAPI.Access; тепер можна виконати дзвінок Connect API; за допомогою функції SendMessage АРІ можна доправити повідомлення.*/

//com_load_typelib(“SKYPEAPILib.Conversion”);

$com = new COM(“SKYPEAPI.Access”) or die(“can not create

SKYPEAPILib.Access jbject”);

$com->Connect();


$com->SendMessage($gethandle, $detmessage);


$sentmsg =”Message :”.$getmessage.” sent to $gethandle”;

$label->set_text($sentmsg);

}

}

/* Створити вікно.*/

$window =&new GtkWwndow();

$window->set_name('main window');

$window->set_title('PaGux Skype Chat for PHP-GTK');

$window->set_usize(400, 300);

$window->connect('destroy', 'destroy');

$window->connect('delete-event', 'delete-event');

$window->set_border_width(10);

$window->set_position(GTK_WIN_POS_CENTER);

/* Створити фрейм.*/

$frame = $new GtkFrame('A Simple Skype Chat Program');

$window->add($frame);

/* Створити вертикальну панель для розміщення на ній інших елементів.*/

$box1 = $new GtkVBox();

$frame->add($box1);

$box1->show();

/* Створити область для оновлення даних.*/

$label = $new GtkLabel(' ');

$box1->pack_start($label);

$label->show();


$labelhandle = $new GtkLabel('Enter Skype Handle');

$box1->pack_start($labelhandle);

$labelhandle->show();

/* Створити горізонтальну лінію.*/

$separator = $new GtkSeparator();

$box1->pack_start($separator);

$separator->show();


/* Створити текстове поле для введення інформації користувачем.*/

$entry = $new GtkEntry();

$box1->pack_start($entry);

$entry->show();


$labelmsg = $new GtkLabel('Enter Message');

$box1->pack_start($labelmsg);

$labelmsg->show();

$box1->pack_start($separator);

$separator->show();


$message = $new GtkEntry();

$box1->pack_start($message);

$message->show();


/* Створити горізонтальну панель у нижній частині вікна.*/

$box2 = $new GtkHButtonBox();

$box2->set_layout(GTK_BUTTONBOX_SPREAD);

$box1->add($box2);

$box1->show();


/* Об’явити кнопку, розташовану на панелі кнопок.*/

$button = $new GtkButton('Send Message ');

$button->connect_object('clicked', 'send_message', $label,

$entry, $message);

$box2->pack_start($button);

$button->show();


/* Об’явити другу кнопку на панелі кнопок.*/

$button = $new GtkButton('Close Window');

$button->connect_object('clicked', 'destroy');

$box2->pack_start($button);

$button->show();


/* Закрити фрейм при його одночасному відображені.*/

$frame->show();

/*Передати команду вікну для відображення усіх розміщених на ньому елементів*/

$window->show_all();


/* Завершити виконання програми.*/

Gtk: :main();

?>


У лістингу 5 наведено вихідний код Java утиліти Sample Chat Message Utility на мові програмування Java. Для забезпечення доступу клієнтського додатка, написаного на Java, до оболонки Skype API використовується програма JSkype, яка базується на Java Native Interface (JNI). Програмний продукт JSkype (Java to Skype API (JSA)) має відкритий код і є доступним для користувачів. Програма побудована на інкапсуляції і приховуванні справжніх дзвінків Skype API.

Перед тестуванням програми треба завантажити JSkype, у піддиректорії зберігаються файли бібліотеки JSkype.jar і JSkype.dll. Для компіляції файла JNI(.dll) у MS VC++ 6.0 треба додатково завантажити .dll file – Microsoft C Runtime Library (v. 6.0.8337.0).

Для виконання додатка на Java в середині пакета JSkype без внесення змін потрібне програмне забезпечення Standard Widget Toolkit (SWT), яке також треба завантажити. Завантаження текста програми можна здійснити після зберігання файла у поточній директорії і наявності програм Java 2 Platform (JDK) або Java Runtime Environment (JRE) версії пізніше v1.4.2.

Для виконання програми треба запустити командний файл JskypeExample.bat:


REM set path = .\jre\bin,%path%

java -classpath .;jskype.jar;swt.jar

net.lamot.java.jskype.swtclient.swtChatWindow


У разі відсутності на комп’ютері Java треба розархівувати JRE.zip у директорію Jskype:


SET PATH = .\JRE\BIN,%PATH%

java -classpath .;jskype.jar;swt.jar

net.lamot.java.jskype.swtclient.swtChatWindow


Спрощення запуску програми можливе заданням шляху у Java CLASSPATH; треба розташувати файли swf-win32-30xxdll і swt.jar, де хх означає номер поточної версії (наприклад, 64 і вище) і розмістити їх за посиланням.

Наведений приклад виконується так само, як і версія Java утиліти SkypeTracer.

Лістинг 5 Вихідний код утиліти Sample Chat Massage

Utility на мові програмування Java


Код утиліти дозволяє доправити текстове повідомлення користувачеві Skype з іменем “theptcompany”.

стр.46 – печатный текст(стр.23- рукописный текст)

//Імпортувати пакети JSkype

import net.lamot.java.jskype.general.AbstractMessenger;

import net.lamot.java.jskype.general.MessageListenerInterface;

import net.lamot.java.jskype.windows.Messenger;

import.java.lang.Thread;

import.java.langException;


//Інтерфейс MessageListenerinterface визначає метод onMessageReceived, виклик якого здійснюється після отримання відповіді від виконуваного клієнтського додатка Skype Client.

public class JSkypeTest implements MessageListenerInterface {


//Об’ява об’єкта для доправляння команд Skype

private AbstractMessenger msgr = null;


//Створення нового примірника об’єкта JSkypeTest

public JSkypeTest() {

try {

// pause 6 seconds to wait for the initialization of JSkype


Thread.sleep(6000);

// send the Skype API text command

msgr.sendMessage(“Message theptcompany hello from

JSkypeTest" );

}

catch (Exception e) {

e.printStackTrace();

}

}


//* @param args – the аргументи програмного рядка

public static void main(Strong[] args) {

new JSkypeTest();

}


public void onMessageReceived(String str) {


//У відповідь на отримання відповіді від JSkype

System.out.println(str);

}


}


Код, наведений у лістингу можна скомпілювати, якщо запустити командний файл JSTest.bat:

javac -classpath .;JSkype.jar JSkypeTest.java

java -classpath .;JSkype.jar JSkypeTest


Для того, щоб запобігти впливу вірусів у відкритому коді JSkype треба отримувати його за посиланням [ ].

Якщо використати відповідні відгуки Skype у додатку користувача, можна отримати, наприклад, програмне привітання у відповідь на отримання дзвінка від абонента та запису повідомлень на автовідповідач.


CONNSTATUS ONLINE

CURRENTUSERHANDLE beichuang

USERSTATUS INVISIBLE

MESSAGE 57STATUS SENDING

AUTOAWAY ON

MESSAGE 57STATUS SENDING

MESSAGE 57STATUS SENT


Завдяки пакету JSkype здійснюється сумісність поміж Java-додатками і Skype. Для завершення роботи додатка треба кожного разу додавати виклик функції call system.exit() для реалізації destroy.

У лістингу 6 показано вихідний код програми на мові Microsoft C#, яка виконує за допомогою оболонки Skype АРІ СОМ Wrapper об’яву функцій і виконання дзвінків для відслідковування надходження і обробляння відповідних подій.

Основні етапи використання Skype АРІ Wrapper:
  • додавання посилання у бібліотеку типів Skype АРІ Wrapper
  • об’ява інтерфейс них об’єктів Skype;
  • об’ява обробників подій;
  • створення об’єктів;
  • виконування додзвонів.

Додавання посилання у бібліотеку Skype АРІ у діалоговому вікні треба вибрати Add Reference, перейти на закладку СОМ, вибрати Skype АРІ library і натиснути кнопку Select.

Для об’яви інтерфейсних об’єктів Skype треба на формі визначити два поля:


private ConversionClass m_objConversion;

private AccessClass m_objAccess;


Для об’яви обробників подій треба скористатись відповідними змінними, які описані у документації Skype АРІ СОМ Wrapper або у Intellisense у Visual Studio.


Лістинг 6 Вихідний код програми додзвону

та передавання повідомлень на мові С#

стр.50 – печатный текст(стр.25- рукописный текст)

// Для створення і під’єднання до Skype раніше об’явлених об’єктів Skype треба виконати код:


try

{


// Ініціалізація створених об’єктів


m_objConversion = new SKYPEAPILib.ConversionClass();

m_objAccess = new SKYPEAPILib.AccessClass();


// Визначення наявності подій


m_objAccess.APIStatusChanged += new

IaccessEvents_APIStatusChangedEventHandler(APIStatusChanged);


// Виконування з’єднання з додатком Skype


m_objAccess.Connect();

} catch (Exception ex) {

MessageBox.Show(this, ex.Message, “Unable to Initialize Skype

Connectivity”, MessageBoxButtons.OK, MessageBoxIcon.Error);

}


// Вилучення об’єктів автоматичне.


// Перегляд власного апереліку користувачів Skype:


foreach(User objUser in m_objAccess.GetFriendList())

{

AddUserHandleToMyList(objUser.Handle)

}


// Доправляння повідомлення:


m_objAccess.SendMessage(“MyFriend”, “How are You”);


// Зміна статуса додатка у мережі:


m_objAccess.CurrentUserStatus = SkypeOnlineStatus.olsAway;


// Завершення усіх активних дзвінків:


foreach(Call objCall in m_objAccess.GetActiveCallList())

{

objCall.Status = SkypeCallProgress.prgFinished;

}


У лістингу 7 показано фрагменти вихідного коду створення об’єктів Skype і задання свого класу для отримання повідомлень про подію відносно обміну даними.

Для створення програми на С++, починаючи з версії С++6.0 до С++.NETз використанням Active Template Library (ATL) від Microsoft треба скористатись функціями Skype АРІ COM Wrapper. Наведені у лістингу коди можуть використовуватись з Microsoft Foundation Classes (MSF) і з додатком “pure-ATL”.

Впровадження Skype АРІ Wrapper відбувається поетапно.

Для імпортування бібліотеки типів з метою доступу до типів даних та згенерованим проміжним (proxy) класам треба у файлі stdafx.h розмістити рядок:


#import “c:\\winnt\\system32\\skypeapi.dll” named_guids

using namespace SKYPEAPILib;


Для запису файла бібліотеки skypeapi.dllтреба завдати повний шлях.

Для впровадження інтерфейса IDISPEVENTIMPL, наприклад, у разі роботи з додатком MFC Dialog треба виконати програмний код:


// IDC_MYSKYPE може бути постійною унікальною будь-якою константою

#define IDC_MYSKYPE 0x100


class CMySkypeAppDlg: public Cdialog,

public IDispEventImpl
&DIDD__IAccessEvents, &LIBID_SKYPEAPILib, 1, 0>

{


public:


// Додати інші необхідні елементи MFC/ATL


BEGIN_SINK_MAP(CMySkypeAppDlg)

END_SINK_MAP()


protected


IAccessPtr m_ptrAccess;

IConversionPtr m_ptrConversion;


void ConnectToSkype();

void DisconnectFromSkype();

};


Для кожної події, яка відповідає дзвінку, необхідно визначити відповідну функцію заданого формату. Утиліта OLE View дозволяє переглянути опис зовнішніх функцій класу IAccessEvents. Для цього треба у списку бібліотек типів (Type Libraries) вибрати бібліотеку SkypeАРІ, а потім dispinterface_IAccessEvents. Для оброблення подій дзвінка у відповідь потрібні два елементи: id та paramater list. Наприклад, для оброблення події APIStatusChanged зовнішня функція має вигляд:


[id(0x00000009), helpstring(“method APIStatusChanged”)]

HRESULT APIStatusChanged(SkypeAPIAttachmentStatus Status);


In your class, you’ll need to define the following:


HRESULT __stdcall OnAPIStatusChanged (enum SkypeAPIAttachmentStatus Status);

BEGIN_SINK_MAP(CMySkypeAppDlg)

SINK_ENTRY_EX(IDC_MYSKYPE, DIID__IAccessEvents, 0X9, OnAPIStatusChanged)

END_SINK_MAP()


Для стабільної роботи програми рекомендується перевизначити функцію GetFuncInfoFromId відповідно до коду:


virtual HRESULT GetFuncInfoFromId(const IID& iid, DISPID

dispidMember,

LCID lcid, _ATL_FUNC_INFO& info) {


// Впровадження базового класу

HRESULT hr = IDispEventImpl<0x100, CSkypeTestCPPDlg,

&DIID__IAccessEvents, &LIBID_SKYPEAPILib, 1, 0>::

GetFuncInfoFromId(idd, dispidMember, lcid, info);

if (SUCCEEDED(hr)) {

if (::InlineIsEqualGUID(idd, DIID__IAccessEvents)) {

for(long l = 0; l < info.nParams; l++) {

if(info.pVarTypes[l] == VT_USERDEFINED) {

info.pVarTypes[l] = VT_I4;

}

}

}

}

return hr;

}


Для визначення функції і створення об’єктів SkypeАРІ з їх подальшим вилученням після закінчення діалога треба скористатись функцією ConnectToSkype: об’єкти Access (Доступ) і Conversion (Діалог), функція для вилучення – DisconnectFromSkype. Для діалогового додатка MFC треба скористатись функцією ConnectSkype з оброблювача подій OnInitDialog і DisconnectFromSkype з оброблювача подій DestroyWindow.


Лістинг 7 Вихідний код програми створення об’єктів Skype

і задання свого класу для отримання повідомлень про події

стр.56 – печатный текст(стр.27- рукописный текст)

void ConnectToSkype()

{

TCHAR msg[128];


// Створити об’єкт Skype Access і доправити інформацію про надходження події

HRESULT hr = m_ptrAccess.CreateInstance(__uuidof(Access));

if(FAILED(hr)) {

_stprintf(msg, _T(“Unable to create Skype Access object: 0x%08x”),

hr);

MessageBox(msg, “Error”, MB_OK | MB_ICONSTOP);

} else {

IUnknownPtr pUnk;

m_ptrAccess.QueryInterface(IID_IUnknown, & pUnk);

hr = DispEventAdvise(pUnk);

pUnk.Release();

if(FAILED(hr)) {

_stprintf(msg, _T(“Unable to capture events from Skype Access object:

0x%08x”), hr);

MessageBox(msg, _T(“Error”), MB_OK | MB_ICONSTOP);

}

}


// Створити об’єкт Skype Conversation для відображення текста перерахованих типів

if(SUCCEEDED(hr)) {

hr = m_ptrConversion.CreateInstance(__uuidof(Conversion));

if(FAILED(hr)) {

_stprintf(msg, _T(“Unable to create Skype Conversion utility object:

0x%08x”), hr);

MessageBox(msg, _T(“Error”), MB_OK | MB_ICONSTOP);

}

}


if(SUCCEEDED(hr)) {

hr = m_ptrAccess->Connect();

if(FAILED(hr)) {

_stprintf(msg, _T(“Unable to receive Skype events: 0x%08x”), hr);

MessageBox(msg, _T(“Error”), MB_OK | MB_ICONSTOP);

}

}

}


// Завершення програми


void DisconnectFromSkype()

{

if(m_ptrAccess) {

IUnknownPtr pUnk;

m_ptrAccess.QueryInterface(IID_IUnknown, & pUnk);

DispEventUnadvise(pUnk);

pUnk.Release();

m_ptrAccess.Release();

}


if(m_ptrConversion) {

m_ptrConversion.Release();

}

}


Клас СSkypeMessageQueue у додатках може звертатися до SkypeАРІ, а також отримувати можливість використовувати функцію багато потокового і Unicode/UTF-8 переведення даних. Принцип використання всього класу СSkypeMessageQueue відображено у файлі Access.срр.