#include #include #include #include #include #define MY_DLSYM(X,Y,Z) *(void **)(&X) = dlsym(Y, Z); typedef double(*FunctYdeX)(double); using namespace std; ///fonction qui affiche les nbValues valeurs de f(x) entre xmin et xmax /** @param functionYdeX : fonction f(x) à utiliser * @param xmin : valeur minimale de x * @param xmax : valeur maximale de x * @param nbValues : nombre de valeur de x à afficher */ void displayValues(FunctYdeX functionYdeX, double xmin, double xmax, size_t nbValues){ double x; double dx((xmax - xmin)/((double)nbValues)); for(size_t i(0); i < nbValues; ++i){ x = xmin + ((double)i)*dx; cout << "x = " << x << " => f(x) = " << functionYdeX(x) << endl; } } int main(int argc, char **argv) { double xmin(-10.0); double xmax(10.0); size_t nbValues(100); cout << "f(x) drawer" << endl; //la variable qui nous permettra de tenir la lib m void *handle; //la futur fonction cos que l'on ira chercher dans lib m double (*funcFdeX)(double); //une éventuelle chaîne d'erreur si un truc ne se passe pas comme prévu char *error; handle = dlopen("plugin.so", RTLD_LAZY); if(!handle){ fprintf(stderr, "%s\n", dlerror()); exit(EXIT_FAILURE); } dlerror(); //Efface une erreur existante MY_DLSYM(funcFdeX, handle,"callingFunctionPlugin") error = dlerror(); if(error != NULL){ fprintf(stderr, "%s\n", error); exit(EXIT_FAILURE); } displayValues(funcFdeX, xmin, xmax, nbValues); cout << "Fermeture du plugin" << endl; dlclose(handle); exit(EXIT_SUCCESS); return 0; }