This commit is contained in:
2022-04-23 00:44:52 +03:00
parent 8da0469dbf
commit 7a458c5cbe
3 changed files with 204 additions and 61 deletions

View File

@@ -44,12 +44,13 @@
//! to use it with \b new creation.
//!
//! Main method of %PILibrary is \a resolve(const char *), which returns
//! "void*" pointer to requested method. One should test it
//! \c void* pointer to requested method. One should test it
//! to \c nullptr and convert it in pointer to the required method.
//!
//! In case of C++ libraries it`s very important to use C-linkage
//! In case of C++ libraries it`s very important to use [C-linkage](https://en.cppreference.com/w/cpp/language/language_linkage)
//! of exported methods! You may also need to mark methods for
//! export, e.g. \с __declspec(dllexport)
//! export, e.g. \c __declspec(dllexport). You can include \c <piplugin.h>
//! and use \a PIP_PLUGIN_EXPORT to mark exports with PIP.
//!
//! \~russian
//! %PILibrary позволяет динамически загружать стороннюю библиотеку
@@ -58,12 +59,13 @@
//! рекомендуется создавать её с помощью \b new.
//!
//! Основной метод %PILibrary - это \a resolve(const char *), который возвращает
//! "void*" указатель на запрошенный метод. Необходимо проверить его
//! \c void* указатель на запрошенный метод. Необходимо проверить его
//! на \c nullptr и преобразовать в указатель на нужный метод.
//!
//! В случае C++ библиотеки очень важно использовать C-linkage
//! В случае C++ библиотеки очень важно использовать [C-linkage](https://en.cppreference.com/w/cpp/language/language_linkage)
//! для экспортируемых методов! Также может понадобиться пометить
//! методы на экспорт, например, \с __declspec(dllexport)
//! методы на экспорт, например, \c __declspec(dllexport). Можно включить \c <piplugin.h>
//! и использовать \a PIP_PLUGIN_EXPORT, чтобы пометить экспорт с помощью PIP.
//!
//! \~\code
//! extern "C" {
@@ -175,6 +177,31 @@ bool PILibrary::isLoaded() const {
}
//! \~\details
//! \~english
//! Returns exported method with name "symbol" from
//! loaded library. Method have to use [C-linkage](https://en.cppreference.com/w/cpp/language/language_linkage) and
//! marked to export, according to compiler specification.\n
//! C-linkage doesn`t provide information about return type
//! and arguments, so you should manually convert obtained
//! pointer to required method format before call.
//!
//! \~russian
//! Возвращает экспортированный метод с именем "symbol"
//! из загруженной библиотеки. Метод должен иметь [C-linkage](https://en.cppreference.com/w/cpp/language/language_linkage)
//! и помечен для экспорта, согласно спецификации компилятора.\n
//! C-linkage не предоставляет информации о возвращаемом типе
//! и аргументах, поэтому необходимо вручную преобразовать
//! полученный указатель к формату требуемого метода перед вызовом.
//!
//! \~\return
//! \~english
//! \b void* pointer to method or\n
//! \b nullptr if method doesn`t exists or library not loaded
//!
//! \~russian
//! \b void* указатель на метод или\n
//! \b nullptr если метод не существует или библиотека не загружена
void * PILibrary::resolve(const char * symbol) {
if (!isLoaded()) return 0;
void * ret;