Les bibliothèques partagées dynamiques (DSL) offrent un mécanisme puissant pour la réutilisation du code et la modularité en C. Ils permettent à plusieurs programmes de partager une seule copie du code de la bibliothèque, réduisant ainsi l'utilisation de la mémoire et améliorant les performances.
Pour créer un DSL, vous devrez définir le classes et fonctions dans un fichier d'en-tête et un fichier d'implémentation, respectivement. Dans le fichier d'en-tête, déclarez votre classe avec des fonctions virtuelles pour empêcher les liaisons statiques. Dans le fichier d'implémentation, définissez les fonctions et fournissez des fonctions wrapper pour créer et détruire des objets.
// myclass.h class MyClass { public: virtual void DoSomething(); private: int x; }; // myclass.cc extern "C" MyClass* create_object() { return new MyClass; } extern "C" void destroy_object(MyClass* object) { delete object; }
Sous Linux :
g++ -fPIC -shared myclass.cc -o myclass.so
Sur Mac OS X :
g++ -dynamiclib -flat_namespace myclass.cc -o myclass.so
Dans un exécutable séparé, chargez le DSL à l'aide de dlopen() et récupérez les pointeurs vers les fonctions create_object() et destroy_object(). Créez une instance de classe à l'aide de create_object(), utilisez les méthodes de classe et enfin appelez destroy_object() pour libérer la mémoire.
// class_user.cc int main() { void* handle = dlopen("myclass.so", RTLD_LAZY); MyClass* (*create)(); void (*destroy)(MyClass*); create = (MyClass* (*)())dlsym(handle, "create_object"); destroy = (void (*)(MyClass*))dlsym(handle, "destroy_object"); MyClass* myClass = (MyClass*)create(); myClass->DoSomething(); destroy(myClass); }
Compilation et liaison :
Sous Linux :
g++ class_user.cc -ldl -o class_user
Sous Mac OS X :
g++ class_user.cc -o class_user
L'exemple fourni montre comment créer une bibliothèque de classes partagée, la charger dans un exécutable séparé et utiliser la fonctionnalité de classe. Le concept principal consiste à définir des classes et des fonctions, à créer des fonctions wrapper pour la création et la destruction d'objets, à charger la bibliothèque et à appeler des méthodes de classe.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!