Двусторонний вызов функций (динамические библиотеки C ++)

Я знаю, что когда вы загружаете динамическую библиотеку C ++ с помощью dlopen (), вы можете получить указатели на функции внутри этой библиотеки, но есть ли способ эффективно (производительность имеет значение) сделать это по-другому?

Я знаю, что я мог бы просто вызвать функцию (при инициализации библиотеки) внутри библиотеки, передавая массив указателей на функции, или просто отправляйте указатели по отдельности в функцию. (хотя массив, вероятно, будет лучше, потому что он позволяет мне добавлять функции, но не требует обновления всех старых плагинов)

Я не совсем уверен, что это эффективно, так как может быть сотни функций, и отправка всех из них, возможно, в 10 библиотек может быть неэффективной.

Но я не очень разбираюсь в динамических библиотеках, поэтому мне просто интересно, знаете ли вы, ребята, что лучше сделать это.

РЕДАКТИРОВАТЬ: Может быть, поместить все эти функции в класс, а затем отправить указатель класса через вызов функции? Будет ли это работать?

1

Решение

«Но я не очень разбираюсь в динамических библиотеках»

Это сигнал, чтобы сказать: вы не хотите этого делать.

Возможно, посмотрите на Boost Extension (не является официальной частью boost), которая использует высокоуровневый подход C ++.

Тем не менее, большинство платформ поддерживают это до некоторой степени. Например. XlC ++ в AIX имеет rtld (который требует явной «экспортированной» карты символов, IIRC), и у меня была такая же работа с windows и linux (наш сторонний движок рабочего процесса требовал этого). Отправка массива fptrs кажется наиболее прагматичной и ближе к шаблону «плагинов».

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]