Я хотел бы вызвать функцию из динамической библиотеки во время выполнения.Эта функция возвращает указатель на динамически размещенный объект (я упростил приведенный ниже код до целого).
Я бы хотел, чтобы приведенный ниже код сохранял этот указатель на этот объект, чтобы использовать этот объект по своему усмотрению.
#include <dlfcn.h>
#include <memory>
/* myFunction() is supposed to be in my dynamic library */
std::unique_ptr<int> myFunction()
{
return std::unique_ptr<int>(new(int));
}
int main(int argc, char *argv[])
{
int *(*functionPtr)() = nullptr;
void *handle = dlopen(argv[1], RTLD_NOW);
int *symbolAddress = static_cast<int *>(dlsym(handle, "myFunction"));
*(int **)(&functionPtr) = symbolAddress;
int *x = functionPtr();
//std::unique_ptr<int> x = functionPtr();
return 0;
}
Приведенный выше код компилируется, но я написал, что возвращаемым типом функции myFunction является "int *" (в основной функции), чего нет в объявлении функции в моей библиотеке.
PS: В этом посте я называю «object» для упрощения, например, тип int.
Моя конечная цель - раскомментировать последнюю строку.
Iможет делать не то.Я все еще изучаю язык, но я хотел бы правильно написать код, поэтому я открыт для реструктуризации своего кода.