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

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

Следовательно, все трансляторы C++ ожидают, что импортируемая библиотека и DLL экспортируют один и тот же идентификатор. Полезным результатом этой методики является то, что вы можете спокойно извлечь класс из DLL, использующей одну среду C++, а обратиться к этому классу из любой другой среды C++. Эта возможность необходима при построении основы для независимых от разработчика компонентов повторного пользования.



Полиморфизм на этапе выполнения



Управление реализациями классов с использованием абстрактных базовых классов как интерфейсов открывает целый мир новых возможностей в терминах того, что может случиться на этапе выполнения. Напомним, что DLL FastString экспортирует только один идентификатор – CreateFastString . Теперь пользователю легко динамически загрузить DLL, используя по требованию LoadLibrary , и разрешить этой единственной точке входа использовать GetProcAddress :

IFastString *CallCreateFastString(const char *psz)

{

static IFastString * (*pfn)(const char *) = 0;

if (!pfn) {

// init ptr 1st time through

// первое появление ptr

const TCHAR szDll[] = TEXT(«FastString.DLL»);

const char szFn[] = «CreateFastString»;

HINSTANCE h = LoadLibrary(szDll);

if (h) *(FARPROC*)&pfn = GetProcAddress(h, szFn); }

return pfn ? pfn(psz) : 0;

}

Эта методика имеет несколько возможных приложений. Одна из причин ее использования – предотвращение ошибок, генерируемых операционной системой при работе на машине, где не установлена реализация объектов.

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

Java книги

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