]>
Commit | Line | Data |
---|---|---|
f3845e88 VZ |
1 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
2 | %% Name: dynlib.tex | |
defbed48 | 3 | %% Purpose: wxDynamicLibrary and wxDynamicLibraryDetails documentation |
f3845e88 VZ |
4 | %% Author: Vadim Zeitlin |
5 | %% Modified by: | |
6 | %% Created: 14.01.02 (extracted from dllload.tex) | |
7 | %% RCS-ID: $Id$ | |
8 | %% Copyright: (c) Vadim Zeitlin | |
8795498c | 9 | %% License: wxWindows license |
f3845e88 VZ |
10 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
11 | ||
12 | \section{\class{wxDynamicLibrary}}\label{wxdynamiclibrary} | |
13 | ||
14 | wxDynamicLibrary is a class representing dynamically loadable library | |
169948a0 VZ |
15 | (Windows DLL, shared library under Unix etc.). Just create an object of |
16 | this class to load a library and don't worry about unloading it -- it will be | |
17 | done in the objects destructor automatically. | |
f3845e88 | 18 | |
defbed48 | 19 | \wxheading{Derived from} |
f3845e88 | 20 | |
defbed48 VZ |
21 | No base class. |
22 | ||
23 | \wxheading{Include files} | |
24 | ||
25 | <wx/dynlib.h> | |
26 | ||
a7af285d VZ |
27 | \wxheading{Library} |
28 | ||
29 | \helpref{wxBase}{librarieslist} | |
30 | ||
defbed48 VZ |
31 | (only available if \texttt{wxUSE\_DYNLIB\_CLASS} is set to $1$) |
32 | ||
33 | \latexignore{\rtfignore{\wxheading{Members}}} | |
a018a119 | 34 | |
f3845e88 VZ |
35 | \membersection{wxDynamicLibrary::wxDynamicLibrary}\label{wxdynamiclibrarywxdynamiclibrary} |
36 | ||
37 | \func{}{wxDynamicLibrary}{\void} | |
38 | ||
169948a0 | 39 | \func{}{wxDynamicLibrary}{\param{const wxString\& }{name}, \param{int }{flags = wxDL\_DEFAULT}} |
f3845e88 VZ |
40 | |
41 | Constructor. Second form calls \helpref{Load}{wxdynamiclibraryload}. | |
42 | ||
a018a119 | 43 | |
169948a0 VZ |
44 | \membersection{wxDynamicLibrary::CanonicalizeName}\label{wxdynamiclibrarycanonicalizename} |
45 | ||
08890e27 | 46 | \func{static wxString}{CanonicalizeName}{\param{const wxString\& }{name}, \param{wxDynamicLibraryCategory}{ cat = wxDL\_LIBRARY}} |
169948a0 VZ |
47 | |
48 | Returns the platform-specific full name for the library called \arg{name}. E.g. | |
49 | it adds a {\tt ".dll"} extension under Windows and {\tt "lib"} prefix and | |
50 | {\tt ".so"}, {\tt ".sl"} or maybe {\tt ".dylib"} extension under Unix. | |
51 | ||
52 | The possible values for \arg{cat} are: | |
5bb31e35 | 53 | |
169948a0 VZ |
54 | \begin{twocollist} |
55 | \twocolitem{wxDL\_LIBRARY}{normal library} | |
56 | \twocolitem{wxDL\_MODULE}{a loadable module or plugin} | |
57 | \end{twocollist} | |
58 | ||
59 | \wxheading{See also} | |
60 | ||
61 | \helpref{CanonicalizePluginName}{wxdynamiclibrarycanonicalizepluginname} | |
62 | ||
63 | ||
a018a119 | 64 | |
169948a0 VZ |
65 | \membersection{wxDynamicLibrary::CanonicalizePluginName}\label{wxdynamiclibrarycanonicalizepluginname} |
66 | ||
08890e27 | 67 | \func{static wxString}{CanonicalizePluginName}{\param{const wxString\& }{name}, \param{wxPluginCategory}{ cat = wxDL\_PLUGIN\_GUI}} |
169948a0 VZ |
68 | |
69 | This function does the same thing as | |
fc2171bd | 70 | \helpref{CanonicalizeName}{wxdynamiclibrarycanonicalizename} but for wxWidgets |
169948a0 VZ |
71 | plugins. The only difference is that compiler and version information are added |
72 | to the name to ensure that the plugin which is going to be loaded will be | |
73 | compatible with the main program. | |
74 | ||
75 | The possible values for \arg{cat} are: | |
5bb31e35 | 76 | |
169948a0 VZ |
77 | \begin{twocollist} |
78 | \twocolitem{wxDL\_PLUGIN\_GUI}{plugin which uses GUI classes (default)} | |
79 | \twocolitem{wxDL\_PLUGIN\_BASE}{plugin which only uses wxBase} | |
80 | \end{twocollist} | |
81 | ||
a018a119 | 82 | |
9ae2ec95 VZ |
83 | \membersection{wxDynamicLibrary::Detach}\label{wxdynamiclibrarydetach} |
84 | ||
85 | \func{wxDllType}{Detach}{\void} | |
86 | ||
87 | Detaches this object from its library handle, i.e. the object will not unload | |
88 | the library any longer in its destructor but it is now the callers | |
43e8916f | 89 | responsibility to do this using \helpref{Unload}{wxdynamiclibraryunload}. |
169948a0 | 90 | |
a018a119 | 91 | |
169948a0 VZ |
92 | \membersection{wxDynamicLibrary::GetSymbol}\label{wxdynamiclibrarygetsymbol} |
93 | ||
a018a119 | 94 | \constfunc{void *}{GetSymbol}{\param{const wxString\& }{name}} |
169948a0 VZ |
95 | |
96 | Returns pointer to symbol {\it name} in the library or NULL if the library | |
97 | contains no such symbol. | |
98 | ||
99 | \wxheading{See also} | |
100 | ||
101 | \helpref{wxDYNLIB\_FUNCTION}{wxdynlibfunction} | |
102 | ||
a018a119 | 103 | |
93ed8ff7 VZ |
104 | \membersection{wxDynamicLibrary::GetSymbolAorW}\label{wxdynamiclibrarygetsymbolaorw} |
105 | ||
106 | \constfunc{void *}{GetSymbolAorW}{\param{const wxString\& }{name}} | |
107 | ||
108 | This function is available only under Windows as it is only useful when | |
109 | dynamically loading symbols from standard Windows DLLs. Such functions have | |
110 | either \texttt{'A'} (in ANSI build) or \texttt{'W'} (in Unicode, or wide | |
111 | character build) suffix if they take string parameters. Using this function you | |
112 | can use just the base name of the function and the correct suffix is appende | |
113 | automatically depending on the current build. Otherwise, this method is | |
114 | identical to \helpref{GetSymbol}{wxdynamiclibrarygetsymbol}. | |
115 | ||
116 | ||
6d94009f VZ |
117 | \membersection{wxDynamicLibrary::GetProgramHandle}\label{wxdynamiclibrarygetprogramhandle} |
118 | ||
119 | \func{static wxDllType}{GetProgramHandle}{\void} | |
120 | ||
121 | Return a valid handle for the main program itself or \texttt{NULL} if symbols | |
122 | from the main program can't be loaded on this platform. | |
123 | ||
124 | ||
a018a119 VZ |
125 | \membersection{wxDynamicLibrary::HasSymbol}\label{wxdynamiclibraryhassymbol} |
126 | ||
127 | \constfunc{bool}{HasSymbol}{\param{const wxString\& }{name}} | |
128 | ||
129 | Returns \true if the symbol with the given \arg{name} is present in the dynamic | |
130 | library, \false otherwise. Unlike \helpref{GetSymbol}{wxdynamiclibrarygetsymbol}, | |
131 | this function doesn't log an error message if the symbol is not found. | |
132 | ||
133 | \newsince{2.5.4} | |
134 | ||
135 | ||
f3845e88 VZ |
136 | \membersection{wxDynamicLibrary::IsLoaded}\label{wxdynamiclibraryisloaded} |
137 | ||
138 | \constfunc{bool}{IsLoaded}{\void} | |
139 | ||
169948a0 VZ |
140 | Returns \true if the library was successfully loaded, \false otherwise. |
141 | ||
a018a119 | 142 | |
defbed48 VZ |
143 | \membersection{wxDynamicLibrary::ListLoaded}\label{wxdynamiclibrarylistloaded} |
144 | ||
145 | \func{static wxDynamicLibraryDetailsArray}{ListLoaded}{\void} | |
146 | ||
147 | This static method returns an \helpref{array}{wxarray} containing the details | |
148 | of all modules loaded into the address space of the current project, the array | |
149 | elements are object of \texttt{wxDynamicLibraryDetails} class. The array will | |
43e8916f | 150 | be empty if an error occurred. |
defbed48 | 151 | |
297ebe6b VZ |
152 | This method is currently implemented only under Win32 and Linux and is useful |
153 | mostly for diagnostics purposes. | |
defbed48 VZ |
154 | |
155 | ||
f3845e88 VZ |
156 | \membersection{wxDynamicLibrary::Load}\label{wxdynamiclibraryload} |
157 | ||
169948a0 | 158 | \func{bool}{Load}{\param{const wxString\& }{name}, \param{int }{flags = wxDL\_DEFAULT}} |
f3845e88 | 159 | |
169948a0 VZ |
160 | Loads DLL with the given \arg{name} into memory. The \arg{flags} argument can |
161 | be a combination of the following bits: | |
d2c2afc9 | 162 | |
169948a0 VZ |
163 | \begin{twocollist} |
164 | \twocolitem{wxDL\_LAZY}{equivalent of RTLD\_LAZY under Unix, ignored elsewhere} | |
165 | \twocolitem{wxDL\_NOW}{equivalent of RTLD\_NOW under Unix, ignored elsewhere} | |
166 | \twocolitem{wxDL\_GLOBAL}{equivalent of RTLD\_GLOBAL under Unix, ignored elsewhere} | |
167 | \twocolitem{wxDL\_VERBATIM}{don't try to append the appropriate extension to | |
168 | the library name (this is done by default).} | |
e62e17d7 | 169 | \twocolitem{wxDL\_DEFAULT}{default flags, same as wxDL\_NOW currently} |
e2fc2bd5 VZ |
170 | \twocolitem{wxDL\_QUIET}{don't log an error message if the library couldn't be |
171 | loaded.} | |
169948a0 | 172 | \end{twocollist} |
f3845e88 | 173 | |
169948a0 | 174 | Returns \true if the library was successfully loaded, \false otherwise. |
f3845e88 | 175 | |
a018a119 | 176 | |
169948a0 | 177 | \membersection{wxDynamicLibrary::Unload}\label{wxdynamiclibraryunload} |
f3845e88 | 178 | |
169948a0 | 179 | \func{void}{Unload}{\void} |
f3845e88 | 180 | |
169948a0 | 181 | \func{static void}{Unload}{\param{wxDllType }{handle}} |
f3845e88 | 182 | |
169948a0 VZ |
183 | Unloads the library from memory. wxDynamicLibrary object automatically calls |
184 | this method from its destructor if it had been successfully loaded. | |
4104ed92 | 185 | |
169948a0 VZ |
186 | The second version is only used if you need to keep the library in memory |
187 | during a longer period of time than the scope of the wxDynamicLibrary object. | |
188 | In this case you may call \helpref{Detach}{wxdynamiclibrarydetach} and store | |
189 | the handle somewhere and call this static method later to unload it. | |
f3845e88 | 190 | |
defbed48 VZ |
191 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
192 | ||
193 | \section{\class{wxDynamicLibraryDetails}}\label{wxdynamiclibrarydetails} | |
194 | ||
195 | This class is used for the objects returned by | |
196 | \helpref{wxDynamicLibrary::ListLoaded}{wxdynamiclibrarylistloaded} method and | |
197 | contains the information about a single module loaded into the address space of | |
198 | the current process. A module in this context may be either a dynamic library | |
199 | or the main program itself. | |
200 | ||
201 | \wxheading{Derived from} | |
202 | ||
203 | No base class. | |
204 | ||
205 | \wxheading{Include files} | |
206 | ||
207 | <wx/dynlib.h> | |
208 | ||
a7af285d VZ |
209 | \wxheading{Library} |
210 | ||
211 | \helpref{wxBase}{librarieslist} | |
212 | ||
defbed48 VZ |
213 | (only available if \texttt{wxUSE\_DYNLIB\_CLASS} is set to $1$) |
214 | ||
215 | \latexignore{\rtfignore{\wxheading{Members}}} | |
216 | ||
217 | \membersection{wxDynamicLibraryDetails::GetName}\label{wxdynamiclibrarygetname} | |
218 | ||
219 | \constfunc{wxString}{GetName}{\void} | |
220 | ||
221 | Returns the base name of this module, e.g. \texttt{kernel32.dll} or | |
222 | \texttt{libc-2.3.2.so}. | |
223 | ||
224 | ||
225 | \membersection{wxDynamicLibraryDetails::GetPath}\label{wxdynamiclibrarygetpath} | |
226 | ||
227 | \constfunc{wxString}{GetPath}{\void} | |
228 | ||
229 | Returns the full path of this module if available, e.g. | |
230 | \texttt{c:$\backslash$windows$\backslash$system32$\backslash$kernel32.dll} or | |
231 | \texttt{/lib/libc-2.3.2.so}. | |
232 | ||
233 | ||
234 | \membersection{wxDynamicLibraryDetails::GetAddress}\label{wxdynamiclibrarygetaddress} | |
235 | ||
236 | \constfunc{bool}{GetAddress}{\param{void **}{addr}, \param{size\_t }{*len}} | |
237 | ||
238 | Retrieves the load address and the size of this module. | |
239 | ||
240 | \wxheading{Parameters} | |
241 | ||
242 | \docparam{addr}{the pointer to the location to return load address in, may be | |
243 | \texttt{NULL}} | |
244 | ||
245 | \docparam{len}{pointer to the location to return the size of this module in | |
246 | memory in, may be \texttt{NULL}} | |
247 | ||
248 | \wxheading{Return value} | |
249 | ||
250 | \true if the load address and module size were retrieved, \false if this | |
251 | information is not available. | |
252 | ||
253 | ||
254 | \membersection{wxDynamicLibraryDetails::GetVersion}\label{wxdynamiclibrarygetversion} | |
255 | ||
256 | \constfunc{wxString}{GetVersion}{\void} | |
257 | ||
258 | Returns the version of this module, e.g. \texttt{5.2.3790.0} or | |
259 | \texttt{2.3.2}. The returned string is empty if the version information is not | |
260 | available. | |
261 |