Как получить возвращаемое значение из функции общей библиотеки? - PullRequest
2 голосов
/ 16 ноября 2011

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

Как вернуть значение из функции в общей библиотеке в основной код?

Это моя общая библиотекаsource:

#include <stdio.h>

char* entry(){
  printf("this is a working plugin\n");

  return "here we go!";
}

Когда я вызываю его, я получаю «это рабочий плагин» на стандартный вывод.Мой вопрос сейчас, как я могу получить строку «здесь мы идем» обратно в main.c, который выглядит так:

void *lib_handle;
void (*lib_func)();

...

lib_handle = dlopen("/home/tectu/projects/tibbers/plugins.so", RTLD_LAZY);
if(!lib_handle)
  error("coudln't load plugins", NULL);

lib_func = dlsym(lib_handle, "entry");
  if(!lib_func)
    error("coudln't find symbol in plugin library", NULL);

(*lib_func)();  // here i call the entry() from the .so

Что-то вроде этого не работает:

printf("return value: %s\n, (*lib_func)());

Итак, есть идеи?

Спасибо.

1 Ответ

4 голосов
/ 16 ноября 2011

Работает, когда lib_func правильно объявлено:

char* (*lib_func)();

Возможно, вам понадобится разыграть назначение из dlsym.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...