added wxDynamicLibrary::GetSymbolAorW()
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35003 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
b7146cbec5
commit
93ed8ff770
@ -32,6 +32,7 @@ wxMSW:
|
||||
- Position of wxEVT_MOUSEWHEEL events is now in client, not screen, coordinates.
|
||||
- Handle absence of wxListCtrl column image better (Zbigniew Zagórski)
|
||||
- Fixed asynchronous playback of large sound files in wxSound
|
||||
- Added wxDynamicLibrary::GetSymbolAorW()
|
||||
|
||||
wxWinCE:
|
||||
|
||||
|
@ -103,6 +103,19 @@ contains no such symbol.
|
||||
\helpref{wxDYNLIB\_FUNCTION}{wxdynlibfunction}
|
||||
|
||||
|
||||
\membersection{wxDynamicLibrary::GetSymbolAorW}\label{wxdynamiclibrarygetsymbolaorw}
|
||||
|
||||
\constfunc{void *}{GetSymbolAorW}{\param{const wxString\& }{name}}
|
||||
|
||||
This function is available only under Windows as it is only useful when
|
||||
dynamically loading symbols from standard Windows DLLs. Such functions have
|
||||
either \texttt{'A'} (in ANSI build) or \texttt{'W'} (in Unicode, or wide
|
||||
character build) suffix if they take string parameters. Using this function you
|
||||
can use just the base name of the function and the correct suffix is appende
|
||||
automatically depending on the current build. Otherwise, this method is
|
||||
identical to \helpref{GetSymbol}{wxdynamiclibrarygetsymbol}.
|
||||
|
||||
|
||||
\membersection{wxDynamicLibrary::GetProgramHandle}\label{wxdynamiclibrarygetprogramhandle}
|
||||
|
||||
\func{static wxDllType}{GetProgramHandle}{\void}
|
||||
|
@ -245,6 +245,30 @@ public:
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef __WXMSW__
|
||||
// this function is useful for loading functions from the standard Windows
|
||||
// DLLs: such functions have an 'A' (in ANSI build) or 'W' (in Unicode, or
|
||||
// wide character build) suffix if they take string parameters
|
||||
static void *RawGetSymbolAorW(wxDllType handle, const wxString& name)
|
||||
{
|
||||
return RawGetSymbol
|
||||
(
|
||||
handle,
|
||||
name +
|
||||
#if wxUSE_UNICODE
|
||||
L'W'
|
||||
#else
|
||||
'A'
|
||||
#endif
|
||||
);
|
||||
}
|
||||
|
||||
void *GetSymbolAorW(const wxString& name) const
|
||||
{
|
||||
return RawGetSymbolAorW(m_handle, name);
|
||||
}
|
||||
#endif // __WXMSW__
|
||||
|
||||
// return all modules/shared libraries in the address space of this process
|
||||
//
|
||||
// returns an empty array if not implemented or an error occurred
|
||||
|
@ -53,7 +53,7 @@
|
||||
#define TEST_CMDLINE
|
||||
#define TEST_DATETIME
|
||||
#define TEST_DIR
|
||||
#define TEST_DLLLOADER
|
||||
#define TEST_DYNLIB
|
||||
#define TEST_ENVIRON
|
||||
#define TEST_EXECUTE
|
||||
#define TEST_FILE
|
||||
@ -85,7 +85,7 @@
|
||||
#define TEST_WCHAR
|
||||
#define TEST_ZIP
|
||||
#else // #if TEST_ALL
|
||||
#define TEST_STACKWALKER
|
||||
#define TEST_DYNLIB
|
||||
#endif
|
||||
|
||||
// some tests are interactive, define this to run them
|
||||
@ -372,7 +372,7 @@ static void TestDirExists()
|
||||
// wxDllLoader
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
#ifdef TEST_DLLLOADER
|
||||
#ifdef TEST_DYNLIB
|
||||
|
||||
#include "wx/dynlib.h"
|
||||
|
||||
@ -398,7 +398,7 @@ static void TestDllLoad()
|
||||
}
|
||||
else
|
||||
{
|
||||
typedef int (*wxStrlenType)(const char *);
|
||||
typedef int (wxSTDCALL *wxStrlenType)(const char *);
|
||||
wxStrlenType pfnStrlen = (wxStrlenType)lib.GetSymbol(FUNC_NAME);
|
||||
if ( !pfnStrlen )
|
||||
{
|
||||
@ -419,6 +419,26 @@ static void TestDllLoad()
|
||||
wxPuts(_T("... ok"));
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __WXMSW__
|
||||
static const wxChar *FUNC_NAME_AW = _T("lstrlen");
|
||||
|
||||
typedef int (wxSTDCALL *wxStrlenTypeAorW)(const wxChar *);
|
||||
wxStrlenTypeAorW
|
||||
pfnStrlenAorW = (wxStrlenTypeAorW)lib.GetSymbolAorW(FUNC_NAME_AW);
|
||||
if ( !pfnStrlenAorW )
|
||||
{
|
||||
wxPrintf(_T("ERROR: function '%s' wasn't found in '%s'.\n"),
|
||||
FUNC_NAME_AW, LIB_NAME);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( pfnStrlenAorW(_T("foobar")) != 6 )
|
||||
{
|
||||
wxPrintf(_T("ERROR: loaded function is not wxStrlen()!\n"));
|
||||
}
|
||||
}
|
||||
#endif // __WXMSW__
|
||||
}
|
||||
}
|
||||
|
||||
@ -450,7 +470,7 @@ static void TestDllListLoaded()
|
||||
|
||||
#endif
|
||||
|
||||
#endif // TEST_DLLLOADER
|
||||
#endif // TEST_DYNLIB
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxGet/SetEnv
|
||||
@ -4119,10 +4139,10 @@ int main(int argc, char **argv)
|
||||
TestDirTraverse();
|
||||
#endif // TEST_DIR
|
||||
|
||||
#ifdef TEST_DLLLOADER
|
||||
#ifdef TEST_DYNLIB
|
||||
TestDllLoad();
|
||||
TestDllListLoaded();
|
||||
#endif // TEST_DLLLOADER
|
||||
#endif // TEST_DYNLIB
|
||||
|
||||
#ifdef TEST_ENVIRON
|
||||
TestEnvironment();
|
||||
|
Loading…
Reference in New Issue
Block a user