Removed WXWIN_COMPATIBILITY_2_2 together with code guarded by it.
Changed default for WXWIN_COMPATIBILITY_2_4 to 0. Added WXWIN_COMPATIBILITY_2_6 (defaults to 1). Ran build/update-setup-h. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35858 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -359,225 +359,5 @@ void wxPluginManager::Unload()
|
||||
m_entry = NULL;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if WXWIN_COMPATIBILITY_2_2
|
||||
|
||||
wxPluginLibrary *wxPluginManager::GetObjectFromHandle(wxDllType handle)
|
||||
{
|
||||
for ( wxDLManifest::iterator i = ms_manifest->begin();
|
||||
i != ms_manifest->end();
|
||||
++i )
|
||||
{
|
||||
wxPluginLibrary * const lib = i->second;
|
||||
|
||||
if ( lib->GetLibHandle() == handle )
|
||||
return lib;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// wxDllLoader (all these methods are static)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
wxDllType wxDllLoader::LoadLibrary(const wxString &name, bool *success)
|
||||
{
|
||||
wxPluginLibrary *p = wxPluginManager::LoadLibrary
|
||||
(
|
||||
name,
|
||||
wxDL_DEFAULT | wxDL_VERBATIM | wxDL_NOSHARE
|
||||
);
|
||||
|
||||
if ( success )
|
||||
*success = p != NULL;
|
||||
|
||||
return p ? p->GetLibHandle() : 0;
|
||||
}
|
||||
|
||||
void wxDllLoader::UnloadLibrary(wxDllType handle)
|
||||
{
|
||||
wxPluginLibrary *p = wxPluginManager::GetObjectFromHandle(handle);
|
||||
|
||||
wxCHECK_RET( p, _T("Unloading a library not loaded with wxDllLoader?") );
|
||||
|
||||
p->UnrefLib();
|
||||
}
|
||||
|
||||
void *
|
||||
wxDllLoader::GetSymbol(wxDllType dllHandle, const wxString &name, bool *success)
|
||||
{
|
||||
wxPluginLibrary *p = wxPluginManager::GetObjectFromHandle(dllHandle);
|
||||
|
||||
if ( !p )
|
||||
{
|
||||
wxFAIL_MSG( _T("Using a library not loaded with wxDllLoader?") );
|
||||
|
||||
if ( success )
|
||||
*success = false;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return p->GetSymbol(name, success);
|
||||
}
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Global variables
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
wxLibraries wxTheLibraries;
|
||||
|
||||
// ============================================================================
|
||||
// implementation
|
||||
// ============================================================================
|
||||
|
||||
// construct the full name from the base shared object name: adds a .dll
|
||||
// suffix under Windows or .so under Unix
|
||||
static wxString ConstructLibraryName(const wxString& basename)
|
||||
{
|
||||
wxString fullname;
|
||||
fullname << basename << wxDllLoader::GetDllExt();
|
||||
|
||||
return fullname;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// wxLibrary (one instance per dynamic library)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
wxLibrary::wxLibrary(wxDllType handle)
|
||||
{
|
||||
typedef wxClassInfo *(*t_get_first)(void);
|
||||
t_get_first get_first;
|
||||
|
||||
m_handle = handle;
|
||||
|
||||
// Some system may use a local heap for library.
|
||||
get_first = (t_get_first)GetSymbol(_T("wxGetClassFirst"));
|
||||
// It is a wxWidgets DLL.
|
||||
if (get_first)
|
||||
PrepareClasses(get_first());
|
||||
}
|
||||
|
||||
wxLibrary::~wxLibrary()
|
||||
{
|
||||
if ( m_handle )
|
||||
{
|
||||
wxDllLoader::UnloadLibrary(m_handle);
|
||||
}
|
||||
}
|
||||
|
||||
wxObject *wxLibrary::CreateObject(const wxString& name)
|
||||
{
|
||||
wxClassInfo *info = (wxClassInfo *)classTable.Get(name);
|
||||
|
||||
if (!info)
|
||||
return NULL;
|
||||
|
||||
return info->CreateObject();
|
||||
}
|
||||
|
||||
void wxLibrary::PrepareClasses(wxClassInfo *first)
|
||||
{
|
||||
// Index all class infos by their class name
|
||||
wxClassInfo *info = first;
|
||||
while (info)
|
||||
{
|
||||
if (info->m_className)
|
||||
classTable.Put(info->m_className, (wxObject *)info);
|
||||
info = info->m_next;
|
||||
}
|
||||
|
||||
#if !wxUSE_EXTENDED_RTTI
|
||||
// Set base pointers for each wxClassInfo
|
||||
info = first;
|
||||
while (info)
|
||||
{
|
||||
if (info->GetBaseClassName1())
|
||||
info->m_baseInfo1 = (wxClassInfo *)classTable.Get(info->GetBaseClassName1());
|
||||
if (info->GetBaseClassName2())
|
||||
info->m_baseInfo2 = (wxClassInfo *)classTable.Get(info->GetBaseClassName2());
|
||||
info = info->m_next;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void *wxLibrary::GetSymbol(const wxString& symbname)
|
||||
{
|
||||
return wxDllLoader::GetSymbol(m_handle, symbname);
|
||||
}
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// wxLibraries (only one instance should normally exist)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
wxLibraries::wxLibraries():m_loaded(wxKEY_STRING)
|
||||
{
|
||||
}
|
||||
|
||||
wxLibraries::~wxLibraries()
|
||||
{
|
||||
wxNode *node = m_loaded.GetFirst();
|
||||
|
||||
while (node) {
|
||||
wxLibrary *lib = (wxLibrary *)node->GetData();
|
||||
delete lib;
|
||||
|
||||
node = node->GetNext();
|
||||
}
|
||||
}
|
||||
|
||||
wxLibrary *wxLibraries::LoadLibrary(const wxString& name)
|
||||
{
|
||||
wxLibrary *lib;
|
||||
wxClassInfo *old_sm_first;
|
||||
wxNode *node = m_loaded.Find(name.GetData());
|
||||
|
||||
if (node != NULL)
|
||||
return ((wxLibrary *)node->GetData());
|
||||
|
||||
// If DLL shares data, this is necessary.
|
||||
old_sm_first = wxClassInfo::sm_first;
|
||||
wxClassInfo::sm_first = NULL;
|
||||
|
||||
wxString libname = ConstructLibraryName(name);
|
||||
|
||||
bool success = false;
|
||||
wxDllType handle = wxDllLoader::LoadLibrary(libname, &success);
|
||||
if(success)
|
||||
{
|
||||
lib = new wxLibrary(handle);
|
||||
wxClassInfo::sm_first = old_sm_first;
|
||||
|
||||
m_loaded.Append(name.GetData(), lib);
|
||||
}
|
||||
else
|
||||
lib = NULL;
|
||||
return lib;
|
||||
}
|
||||
|
||||
wxObject *wxLibraries::CreateObject(const wxString& path)
|
||||
{
|
||||
wxNode *node = m_loaded.GetFirst();
|
||||
wxObject *obj;
|
||||
|
||||
while (node) {
|
||||
obj = ((wxLibrary *)node->GetData())->CreateObject(path);
|
||||
if (obj)
|
||||
return obj;
|
||||
|
||||
node = node->GetNext();
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif // WXWIN_COMPATIBILITY_2_2
|
||||
|
||||
|
||||
#endif // wxUSE_DYNAMIC_LOADER
|
||||
|
||||
|
||||
Reference in New Issue
Block a user