Я работаю с устаревшей библиотекой C, которую можно расширить, написав определенные пользователем функции и затем перекомпилировав исходный код. Я хочу избежать требования компиляции и вместо этого расширить его ОДНАЖДЫ с помощью функции (см. Псевдокод ниже):
Эта функция будет реализована следующим образом:
VARIANT_TYPE CallSharedLibFunction(const char* library_name, const char* funcname, const char *params, const char* return_type){
// parse arguments and get data types and count
// initiate variable of data type indicated by return_type, to hold returned variable
/* this is the part I need help with */
// lptr = LoadSharedLibrary(library_name);
// funcptr = GetFunctionAddress(lptr, funcname);
// call function and pass it arguments
retvalue = funcptr(param1, param2, param3);
// wrap up returned value in the VARIANT_TYPE
VARIANT_TYPE ret;
setVariantValue(ret, retvalue, return_type);
return ret;
}
Примечание. Несмотря на имена Windows-звучания (VARIANT_TYPE, LoadSharedLibrary и GetFunctionAddress), я занимаюсь разработкой для Linux (Ubuntu 9.10). В идеале я хотел бы, чтобы реализация загрузки библиотеки была кроссплатформенной (поскольку я использую код ANSI C). Но если мне придется выбирать одну платформу, то это должна быть платформа Linux.
Я был бы очень признателен, если бы кто-нибудь смог пролить некоторый свет на то, как я могу вызывать функции в произвольных общих библиотеках (в идеале, кроссплатформенным способом - в противном случае в Linux), чтобы я мог реализовать вышеупомянутую функцию. 1010 *