]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/dll/my_dll.cpp
Applied patch containing small corrections to German translations.
[wxWidgets.git] / samples / dll / my_dll.cpp
index 8b8dfd003a237d8745c6954a611ba4db697b7ddc..4b67d6d04e55a569707c531dd1c3ac562c2619a9 100644 (file)
@@ -27,6 +27,7 @@
 #endif
 
 #include "wx/app.h"
+#include "wx/dynlib.h"
 #include "wx/frame.h"
 #include "wx/panel.h"
 #include "wx/sizer.h"
@@ -186,22 +187,21 @@ HANDLE gs_wxMainThread = NULL;
 
 
 //  wx application startup code -- runs from its own thread
-__stdcall unsigned MyAppLauncher(void* event)
+unsigned wxSTDCALL MyAppLauncher(void* event)
 {
     // Note: The thread that called run_wx_gui_from_dll() holds gs_wxStartupCS
     //       at this point and won't release it until we signal it.
 
     // We need to pass correct HINSTANCE to wxEntry() and the right value is
-    // HINSTANCE of this DLL, not of the main .exe.
-    //
-    // This method of obtaining DLL's instance handle requires at least
-    // Windows XP/2003. We could also implement DllMain() and remember it from
-    // there, that would work on older systems too.
-    HINSTANCE hInstance;
-    int ret = GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
-                                (LPCTSTR)&MyAppLauncher,
-                                &hInstance);
-    if ( ret == 0 )
+    // HINSTANCE of this DLL, not of the main .exe, use this MSW-specific wx
+    // function to get it. Notice that under Windows XP and later the name is
+    // not needed/used as we retrieve the DLL handle from an address inside it
+    // but you do need to use the correct name for this code to work with older
+    // systems as well.
+    const HINSTANCE
+        hInstance = wxDynamicLibrary::MSWGetModuleHandle("my_dll",
+                                                         &gs_wxMainThread);
+    if ( !hInstance )
         return 0; // failed to get DLL's handle
 
     // IMPLEMENT_WXWIN_MAIN does this as the first thing
@@ -231,7 +231,9 @@ __stdcall unsigned MyAppLauncher(void* event)
 // public DLL interface
 // ----------------------------------------------------------------------------
 
-extern "C" WXEXPORT
+extern "C"
+{
+
 void run_wx_gui_from_dll(const char *title)
 {
     // In order to prevent conflicts with hosting app's event loop, we
@@ -291,9 +293,7 @@ void run_wx_gui_from_dll(const char *title)
     wxQueueEvent(wxApp::GetInstance(), event);
 }
 
-
-extern "C" WXEXPORT
-void wx_dll_cleanup(void)
+void wx_dll_cleanup()
 {
     wxCriticalSectionLocker lock(gs_wxStartupCS);
 
@@ -311,3 +311,5 @@ void wx_dll_cleanup(void)
     CloseHandle(gs_wxMainThread);
     gs_wxMainThread = NULL;
 }
+
+} // extern "C"