Реферат: Реализация отложенной загрузки библиотек на С

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
Бесплатно скачать Реферат: Реализация отложенной загрузки библиотек на С