Сущность технологии СОМ. Библиотека программиста :: Бокс Дональд
Страница:
49 из 528
h»
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 След. >|