Передача аргументов в общую функцию — C

Я использовал dlopen для загрузки объекта и dlsym для получения указателя функции на функцию общего объекта. Все работает нормально. Я протестировал его, вызывая затем общую функцию, которая (на данный момент) только печатает, и она отлично работает - печатает в основной программе, вызывающей ее. Теперь я хочу передать этой функции два аргумента. int и char *. Может ли кто-нибудь помочь мне понять, как я могу передавать аргументы в общую функцию? Я искал в Интернете, но я не могу понять, как это работает.


person Spyros Rokopanos    schedule 21.11.2012    source источник
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