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