Сущность технологии СОМ. Библиотека программиста   ::   Бокс Дональд

Страница: 49 из 528



class FastString : public IFastString

{ const int mcch;

// count of characters

// счетчик символов

char *mpsz; public: FastString(const char *psz);

~FastString(void);

void Delete(void);

// deletes this instance

// уничтожает этот экземпляр

int Length(void) const;

// returns # of characters

// возвращает число символов

int Find(const char *psz) const;

// returns offset

// возвращает смещение

};

// faststring.cpp

#include

#include «faststring.h»

IFastString* CreateFastString (const char *psz) {

return new FastString(psz);

}

FastString::FastString(const char *psz) : mcch(strlen(psz)) , mpsz(new char[m cch + 1]) {

strcpy( mpsz , psz);

}

void FastString::Delete(void) {

delete this;

}

FastString::~FastString(void) {

delete[] mpsz;

}

int FastString::Lengtn(void) const {

return mcch;

}

int FastString::Find(const char *psz) const {

// O(1) lookup code deleted for clarity

// код поиска 0(1) уничтожен для ясности

}

Рисунок 1.7 показывает представление FastString на этапе выполнения. Чтобы использовать тип данных FastString , клиентам надо просто включить в программу файл определения интерфейса и вызвать CreateFastString :

#include «ifaststring.h»

int f(void)

{ int n = -1;

IFastString *pfs = CreateFastString(«Hi Bob!»);

if (pfs) { n = pfs->Find(«ob»);

pfs->Delete(); }

return n; }

Отметим, что все, кроме одной, точки входа в DLL FastString являются виртуальными функциями. Виртуальные функции класса интерфейса всегда вызываются косвенно, через указатель функции, хранящийся в таблице vtbl , избавляя клиента от необходимости указывать их символические имена на этапе разработки. Это означает, что методы интерфейса защищены от различий в коррекции символических имен на разных трансляторах. Единственная точка входа, которая явно компонуется по имени, – это CreateFastString – глобальная функция, которая обеспечивает клиенту доступ в мир FastString . Заметим, однако, что эта функция была экспортирована с опцией extern "С" , которая подавляет коррекцию символов.

|< Пред. 47 48 49 50 51 След. >|

Java книги

Контакты: [email protected]