Реферат: Реализация отложенной загрузки библиотек на С
TCHAR szMessage[DynFunction::name_type::length + 64];
_stprintf(szMessage, _T("Can'n resolve procedure <%s>: %d"), DynFunction::name_type::GetStr(), GetLastError());
throw E(szMessage);
}
};
};
// we need not implement void return type value policy,
// coz void function can only throw on error
template<class R, R value = R()>
struct CFunProxyValuePolicy
{
template <class DynFunction>
struct FunctionTrait
{
static typename DynFunction::proxy_type::ret_type MakeReturn()
{
return value;
}
};
};
Последние штрихи
Собственно, на этом основные элементы библиотеки реализованы, теперь необходимо описать базовые макросы, которые позволят использовать ее более просто. В библиотеке для объявления импортируемых функций используется интерфейс, сильно напоминающий карту сообщений MFC. Интерфейс состоит из 3-х типов макросов.
Макросы, определяющие модуль и открывающие секцию импортируемых из него функций (DL_USE_xxx_BEGIN);
Макросы, определяющие импортируемые функции (DL_DECLARE_FUN_xxx);
Макрос, закрывающий секцию импорта (DL_USE_MODULE_END).
Таким образом, традиционное объявление динамически импортируемых из библиотеки функций выглядит как
// объявление библиотеки и пространства имен функций, импортируемых из нее DL_USE_MODULE_xxx_BEGIN(name_space, “some_lib.dll”) DL_DECLARE_FUN_xxx(ImportedFunction1Name, … ) К-во Просмотров: 436
Бесплатно скачать Реферат: Реализация отложенной загрузки библиотек на С
|