![]() |
PIP 5.5.3
Platform-Independent Primitives
|
Run-time библиотека. Подробнее...
#include <pilibrary.h>
Открытые члены | |
| PILibrary (const PIString &path_=PIString()) | |
| Создает PILibrary и загружает если "path_" не пустой | |
| ~PILibrary () | |
| Уничтожает PILibrary и выгружает библиотеку, если она была загружена | |
| bool | load (const PIString &path_) |
| Загружает библиотеку по относительному или абсолютному пути "path_". | |
| bool | load () |
| Загружает библиотеку по пути path() | |
| void | unload () |
| Выгружает библиотеку, если она была загружена | |
| void * | resolve (const char *symbol) |
| Получает экспортированный метод библиотеки с именем "symbol". Подробнее... | |
| bool | isLoaded () const |
| Возвращает успешно ли загружена библиотека | |
| PIString | path () const |
| Возвращает путь к библиотеке | |
| PIString | lastError () const |
| Возвращает последнюю ошибку в читаемом виде | |
Run-time библиотека.
PILibrary позволяет динамически загружать стороннюю библиотеку и использовать оттуда методы. Экземпляр PILibrary содержит указатель на библиотеку и выгружает её в деструкторе, поэтому рекомендуется создавать её с помощью new.
Основной метод PILibrary - это resolve(const char *), который возвращает void* указатель на запрошенный метод. Необходимо проверить его на nullptr и преобразовать в указатель на нужный метод.
В случае C++ библиотеки очень важно использовать C-linkage для экспортируемых методов! Также может понадобиться пометить методы на экспорт, например, __declspec(dllexport). Можно включить <piplugin.h> и использовать PIP_PLUGIN_EXPORT, чтобы пометить экспорт с помощью PIP.
Библиотека:
Программа:
| void * PILibrary::resolve | ( | const char * | symbol | ) |
Получает экспортированный метод библиотеки с именем "symbol".
Возвращает экспортированный метод с именем "symbol" из загруженной библиотеки. Метод должен иметь C-linkage и помечен для экспорта, согласно спецификации компилятора.
C-linkage не предоставляет информации о возвращаемом типе и аргументах, поэтому необходимо вручную преобразовать полученный указатель к формату требуемого метода перед вызовом.
void* указатель на метод или
nullptr если метод не существует или библиотека не загружена