// By Dom Lachowicz Dec 20, 2000 // purely abstract base class class XAP_Module { public: XAP_Module (const char * file_name) = 0; virtual ~XAP_Module (void) = 0; virtual void resolveSymbol (const char * symbol_name, void ** symbol) = 0; virtual void makeResident (void) = 0; virtual char * getModuleName (void) const = 0; virtual char * getErrorMsg (void) const = 0; }; // Glib impl. MSFT version would be easy to do #include class XAP_UnixModule : public XAP_Module { public: XAP_UnixModule (const char * file_name) { m_module = g_module_open(file_name); m_name = g_module_name (m_module); } ~XAP_UnixModule (void) { g_free(name); g_module_close (m_module); } virtual char * getModuleName (void) const { return m_name; } virtual void resolveSymbol (const char * name, void ** symbol) { g_module_symbol (m_module, name, symbol); } virtual void makeResident (void) { g_module_make_resident (m_module); } virtual char * getErrorMsg (void) const { return g_module_error (void); } private: GModule m_module; const char * name; };