]> git.saurik.com Git - wxWidgets.git/commitdiff
added wxDynamicLibrary::GetSymbolAorW()
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 29 Jul 2005 22:27:13 +0000 (22:27 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 29 Jul 2005 22:27:13 +0000 (22:27 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35003 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
docs/latex/wx/dynlib.tex
include/wx/dynlib.h
samples/console/console.cpp

index 84ae5a39c20519cb719fe6b0ae165b4fc0723ce5..645b134a33a6ceacd0d464e935a844f80929699f 100644 (file)
@@ -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:
 
index 5eaaa4265f86cc61b96e412bcb1bf54fdfc36a55..0b125a7da94513781be7184487669cbf3620ee4d 100644 (file)
@@ -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}
index a5273869fde5a90cfe6bcacfb751f13859c238d5..284ce7de2eddc6e75c695eb3bdeeb30d42d0ebb7 100644 (file)
@@ -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
index 687c903bbd095f2459f408e680a0af7121faf1c9..65eacb745989039d561ed420ba449b90c09a0954 100644 (file)
@@ -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();