Implementierung/Design einer Klasse für eine ladbare shared librarry
lima-city → Forum → Programmiersprachen → C/C++ und D
ausgeben
code
eigenschaft
file
funktion
gestalten
grad
interessieren
kommentar
modul
null
pointer
stimmen
string
symbol
windows
-
Mich würde interessieren, wie euch diese Klasse gefällt? (Grade entworfen )
Wie kann man diese noch schöner gestalten? In Kommentaren habe ich das jeweilige äquivalent von Windows erwähnt. (Hoffe die Namen stimmen so )
#pragma once #include <string> #include <dlfcn.h> #include "exception.hpp" typedef void* Module_t; class ModuleException : public IException { public: ModuleException(const char* w) : IException(w) {} }; class Module { private: Module_t module_handle; public: Module() : module_handle(NULL) { } //Call the Open Later Module(std::string file) { Open(file); } //We can't call Open() later ~Module() { if(module_handle != NULL) { dlclose(module_handle); //FreeLibrary on Windows?! } } template<typename T> void Invoke(std::string name, T &funktion) { void *function=NULL; function=dlsym(module_handle,name.c_str()); //GetProcAddress on Windows?! if(function == NULL) { throw ModuleException(dlerror()); //the symbol wasn't found } else { funktion=reinterpret_cast<T>(function); //now we are casting our symbol to the requested function pointer } } void Open(std::string file) { if(module_handle == NULL) { module_handle=dlopen(file.c_str(),RTLD_NOW); //LoadLibrary on Windows?! if(module_handle == NULL) { throw ModuleException(dlerror()); //couldn't find the file? } } else { throw ModuleException("we tried to open the library a second time"); } } };
Was kann man noch für Eigenschaften implementieren? Ist das mit den Exceptions gut gelöst? Oder würdet ihr einfach auf std::cout ausgeben? Ist die Invoke mit dem Template so gut gelöst? (Optimierbar?!) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage