Есть ли лучший способ определить несколько определений функций при использовании динамической библиотеки?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Есть ли лучший способ определить несколько определений функций при использовании динамической библиотеки?

Сообщение Anonymous »


Следующий листинг кода работает отлично, но, поскольку я все еще погружаюсь в воды C++, мне интересно, существует ли лучший - более общий - способ определения каждого из определений функций.
>
Я планирую использовать динамические библиотеки как своего рода систему плагинов для игры и подумываю об использовании чего-то вроде структуры типа std::map, чтобы отслеживать каждую из функций, доступных для каждой плагин. Но я не знаю, как это реализовать, учитывая различия в определениях функций.
#include #include #include // // Как я могу инкапсулировать их согласованным образом? // typedef bool (*logfileOpen_type)(const std::string &newFileName); // logfile_open typedef void (*logfileWrite_type)(const std::string &logText); //logfile_write typedef void (*logfileClose_type)(); //logfile_close typedef std::string (*logfileError_type)(); //logFile_getLastError typedef bool (*logfileActive_type)(); //logFile_enabled интервал основной() { // Загружаем динамический плагин. auto libHandle = dlopen("./libPluginLogfile.so", RTLD_LAZY); Assert(libHandle!= nullptr); если (libHandle!= nullptr) printf("ИНФО: Плагин успешно загружен.\n"); еще { printf("ОШИБКА: не удалось загрузить плагин.\n"); выход (-1); } // Получаем адрес нужной функции auto openFunction = (logfileOpen_type) dlsym(libHandle, "logFile_open"); если (openFunction == nullptr) printf("Невозможно найти функцию [ %s ] [ %s ]\n", "logFile_open", dlerror()); auto writeFunction = (logfileWrite_type) dlsym(libHandle, "logFile_write"); если (writeFunction == nullptr) printf("Невозможно найти функцию [ %s ] [ %s ]\n", "logFile_write", dlerror()); auto closeFunction = (logfileClose_type) dlsym(libHandle, "logFile_close"); если (closeFunction == nullptr) printf("Невозможно найти функцию [ %s ] [ %s ]\n", "logFile_close", dlerror()); auto getErrorFunction = (logfileError_type) dlsym(libHandle, "logFile_getLastError"); если (getErrorFunction == nullptr) printf("Невозможно найти функцию [ %s ] [ %s ]\n", "logFile_getLastError", dlerror()); auto getEnabledFunction = (logfileActive_type) dlsym(libHandle, "logFile_enabled"); если (getEnabledFunction == nullptr) printf("Невозможно найти функцию [ %s ] [ %s ]\n", "logFile_enabled", dlerror()); openFunction("logfile.log"); writeFunction("Запись в файл журнала."); writeFunction(".. и вторая строка."); ЗакрытьФункция(); dlclose (libHandle); std::cout
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»