]> git.saurik.com Git - wxWidgets.git/blame - include/wx/dynlib.h
these aren't being used any more
[wxWidgets.git] / include / wx / dynlib.h
CommitLineData
7b0bfbb2
VZ
1/////////////////////////////////////////////////////////////////////////////
2// Name: dynlib.cpp
3// Purpose: Dynamic library management
4// Author: Guilhem Lavaux
5// Modified by:
6// Created: 20/07/98
7// RCS-ID: $Id$
8// Copyright: (c) Guilhem Lavaux
9// Licence: wxWindows license
10/////////////////////////////////////////////////////////////////////////////
11
34138703
JS
12#ifndef _WX_DYNLIB_H__
13#define _WX_DYNLIB_H__
7a4b9130
GL
14
15#ifdef __GNUG__
a585ca5c 16# pragma interface
7a4b9130
GL
17#endif
18
ed58dbea 19#include "wx/setup.h"
8a0d4cf6
VZ
20
21#if wxUSE_DYNLIB_CLASS
22
ed58dbea
RR
23#include "wx/string.h"
24#include "wx/list.h"
25#include "wx/hash.h"
7a4b9130 26
8a0d4cf6
VZ
27// this is normally done by configure, but I leave it here for now...
28#if defined(__UNIX__) && !(defined(HAVE_DLOPEN) || defined(HAVE_SHL_LOAD))
a585ca5c
KB
29# if defined(__LINUX__) || defined(__SOLARIS__) || defined(__SUNOS__) || defined(__FREEBSD__)
30# define HAVE_DLOPEN
31# elif defined(__HPUX__)
32# define HAVE_SHL_LOAD
33# endif // Unix flavour
3e4efd7c
VZ
34#endif // !Unix or already have some HAVE_xxx defined
35
7b0bfbb2 36#if defined(HAVE_DLOPEN)
a585ca5c 37# include <dlfcn.h>
7b0bfbb2 38 typedef void *wxDllType;
8a0d4cf6 39#elif defined(HAVE_SHL_LOAD)
a585ca5c 40# include <dl.h>
8a0d4cf6 41 typedef shl_t wxDllType;
7b0bfbb2 42#elif defined(__WINDOWS__)
3c1a88d8 43# include <windows.h> // needed to get HMODULE
7b0bfbb2 44 typedef HMODULE wxDllType;
1777b9bb
DW
45#elif defined(__OS2__)
46# define INCL_DOS
47# include <os2.h>
48 typedef HMODULE wxDllType;
7b0bfbb2
VZ
49#elif defined(__WXMAC__)
50 typedef CFragConnectionID wxDllType;
51#else
a585ca5c 52# error "wxLibrary can't be compiled on this platform, sorry."
7b0bfbb2
VZ
53#endif // OS
54
7cc98b3e
VZ
55// LoadLibrary is defined in windows.h as LoadLibraryA, but wxDllLoader method
56// should be called LoadLibrary, not LoadLibraryA or LoadLibraryW!
57#if defined(__WIN32__) && defined(LoadLibrary)
58# include "wx/msw/winundef.h"
7c0f3a1e 59#endif
0c32066b 60
a585ca5c
KB
61// ----------------------------------------------------------------------------
62// wxDllLoader
63// ----------------------------------------------------------------------------
3c1a88d8 64
a585ca5c
KB
65/** wxDllLoader is a class providing an interface similar to unix's
66 dlopen(). It is used by the wxLibrary framework and manages the
67 actual loading of DLLs and the resolving of symbols in them.
68 There are no instances of this class, it simply serves as a
69 namespace for its static member functions.
70*/
71class wxDllLoader
72{
3c1a88d8
VZ
73public:
74 /** This function loads a shared library into memory, with libname
75 being the basename of the library, without the filename
76 extension. No initialisation of the library will be done.
77 @param libname Name of the shared object to load.
78 @param success Must point to a bool variable which will be set to TRUE or FALSE.
79 @return A handle to the loaded DLL. Use success parameter to test if it is valid.
80 */
81 static wxDllType LoadLibrary(const wxString & libname, bool *success = NULL);
82 /** This function unloads the shared library. */
83 static void UnloadLibrary(wxDllType dll);
84 /** This function returns a valid handle for the main program
85 itself. */
86 static wxDllType GetProgramHandle(void);
87 /** This function resolves a symbol in a loaded DLL, such as a
88 variable or function name.
89 @param dllHandle Handle of the DLL, as returned by LoadDll().
90 @param name Name of the symbol.
91 @return A pointer to the symbol.
92 */
93 static void * GetSymbol(wxDllType dllHandle, const wxString &name);
94
95private:
96 /// forbid construction of objects
97 wxDllLoader();
a585ca5c
KB
98};
99
7b0bfbb2 100// ----------------------------------------------------------------------------
7a4b9130 101// wxLibrary
7b0bfbb2 102// ----------------------------------------------------------------------------
7a4b9130 103
7b0bfbb2
VZ
104class wxLibrary : public wxObject
105{
106public:
107 wxHashTable classTable;
f4a8c29f 108
7b0bfbb2 109public:
8a0d4cf6 110 wxLibrary(wxDllType handle);
7b0bfbb2 111 ~wxLibrary();
7a4b9130 112
7b0bfbb2
VZ
113 // Get a symbol from the dynamic library
114 void *GetSymbol(const wxString& symbname);
7a4b9130 115
7b0bfbb2
VZ
116 // Create the object whose classname is "name"
117 wxObject *CreateObject(const wxString& name);
7a4b9130 118
7b0bfbb2
VZ
119protected:
120 void PrepareClasses(wxClassInfo *first);
f4a8c29f 121
7b0bfbb2 122 wxDllType m_handle;
7a4b9130
GL
123};
124
a585ca5c
KB
125
126
7b0bfbb2 127// ----------------------------------------------------------------------------
7a4b9130 128// wxLibraries
7b0bfbb2
VZ
129// ----------------------------------------------------------------------------
130
131class wxLibraries
132{
133public:
134 wxLibraries();
135 ~wxLibraries();
7a4b9130 136
7b0bfbb2
VZ
137 // caller is responsible for deleting the returned pointer if !NULL
138 wxLibrary *LoadLibrary(const wxString& basename);
7a4b9130 139
7b0bfbb2
VZ
140 wxObject *CreateObject(const wxString& name);
141
142protected:
143 wxList m_loaded;
7a4b9130
GL
144};
145
7b0bfbb2 146// ----------------------------------------------------------------------------
7a4b9130 147// Global variables
7b0bfbb2 148// ----------------------------------------------------------------------------
7a4b9130
GL
149
150extern wxLibraries wxTheLibraries;
151
7b0bfbb2 152// ----------------------------------------------------------------------------
7a4b9130 153// Interesting defines
7b0bfbb2 154// ----------------------------------------------------------------------------
7a4b9130 155
f4a8c29f 156#define WXDLL_ENTRY_FUNCTION() \
856d2e52
GL
157extern "C" wxClassInfo *wxGetClassFirst(); \
158wxClassInfo *wxGetClassFirst() { \
159 return wxClassInfo::GetFirst(); \
f4a8c29f 160}
7a4b9130 161
8a0d4cf6
VZ
162#endif // wxUSE_DYNLIB_CLASS
163
7b0bfbb2 164#endif // _WX_DYNLIB_H__