Я использовал dlopen
для загрузки объекта и dlsym
для получения указателя функции на функцию общего объекта. Все работает нормально. Я протестировал его, вызывая затем общую функцию, которая (на данный момент) только печатает, и она отлично работает - печатает в основной программе, вызывающей ее. Теперь я хочу передать этой функции два аргумента. int
и char *
. Может ли кто-нибудь помочь мне понять, как я могу передавать аргументы в общую функцию? Я искал в Интернете, но я не могу понять, как это работает.
Передача аргументов в общую функцию — C
comment
Разве это не просто вопрос того, чтобы функция имела два параметра?
- person Vaughn Cato   schedule 22.11.2012
comment
Да, во-первых, мне нужно изменить прототип функции... Я знаю это... Но я не знаю, как вызвать его с аргументами из основной программы.
- person Spyros Rokopanos   schedule 22.11.2012
comment
Это не должно отличаться от вызова функции, которой нет в разделяемой библиотеке. Вы знакомы с этим?
- person Vaughn Cato   schedule 22.11.2012
comment
То, как вы вызываете любую функцию с аргументами... например. функция (аргумент1, аргумент2); или, в вашем случае, с int и char*: func(666, SpyrosR)
- person Nik Bougalis   schedule 22.11.2012
Ответы (1)
Загрузите функцию:
int (*func)(int x, char *y) = dlsym(dl_handle, "your_function");
Вы вполне можете решить, что вам нужен приведение по возвращению из dlsym()
; это одно из безобразий с динамически загружаемыми библиотеками.
Вызовите его:
int i = 37;
char buffer[64];
int result1 = (*func)(i, buffer); // Old school — pre-C89 (but still works and is explicit)
int result2 = func(i+1, buffer); // New school — can leave you looking for the wrong thing.
person
Jonathan Leffler
schedule
21.11.2012