/
dmitriy.grischenkov
/
calcstc
Обзор
Документация
Войти
/
dmitriy.grischenkov
/
calcstc
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/libWrapper.cpp
45 строк
1 KB
Dmitriy Grischenkov
first load
01 авг 2026, 21:35
01 авг 2026, 21:35
166b1b5
Код
Авторство
О чём код?
#include <QDebug> #include "libWrapper.h" #ifdef Q_OS_LINUX #include <dlfcn.h> #elif defined(Q_OS_WIN) #include <windows.h> #endif void* LibWrapper::libHandle = nullptr; double (*LibWrapper::funcPtr)(int, double, double) = nullptr; bool LibWrapper::load() { if (libHandle) return true; #ifdef Q_OS_LINUX libHandle = dlopen("./calcstc.so", RTLD_LAZY | RTLD_LOCAL); if (!libHandle) { qWarning() << "Не удалось загрузить calcstc.so:" << dlerror(); return false; } funcPtr = reinterpret_cast<decltype(funcPtr)>(dlsym(libHandle, "doIt")); #elif defined(Q_OS_WIN) libHandle = LoadLibraryA("calcstc.dll"); if (!libHandle) { qWarning() << "Не удалось загрузить calcstc.dll"; return false; } funcPtr = reinterpret_cast<decltype(funcPtr)>(GetProcAddress(libHandle, "doIt")); #endif if (!funcPtr) { qWarning() << "Функция doIt не найдена в библиотеке"; return false; } return true; } double LibWrapper::call(int op, double a, double b) { if (!load() || !funcPtr) { throw std::runtime_error("Библиотека не загружена или функция не найдена"); } return funcPtr(op, a, b); }