]> granicus.if.org Git - python/commitdiff
Applied #1069410
authorChristian Heimes <christian@cheimes.de>
Wed, 23 Jan 2008 17:15:06 +0000 (17:15 +0000)
committerChristian Heimes <christian@cheimes.de>
Wed, 23 Jan 2008 17:15:06 +0000 (17:15 +0000)
The "can't load dll" message box on Windows is suppressed while an extension is loaded by calling SetErrorMode in dynload_win.c. The error is still reported properly.

Misc/NEWS
Python/dynload_win.c

index 4c1080ae342abe4fa5d3c5c83a5a324b1c1cb24b..9c083e2d024724fa9c173000de58feea9753635a 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,10 @@ What's New in Python 2.6 alpha 1?
 Core and builtins
 -----------------
 
+- Issue #1069410: The "can't load dll" message box on Windows is 
+  suppressed while an extension is loaded by calling SetErrorMode in
+  dynload_win.c. The error is still reported properly.
+
 - Bug #1915: Python compiles with --enable-unicode=no again. However
   several extension methods and modules do not work without unicode
   support.
index 751790da2b12962ac2a9b1d7614d036a00bd4198..7c71d9c198f9e90a5e135dbc35374937a324ad50 100644 (file)
@@ -171,11 +171,16 @@ dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
                HINSTANCE hDLL = NULL;
                char pathbuf[260];
                LPTSTR dummy;
+               unsigned int old_mode;
                /* We use LoadLibraryEx so Windows looks for dependent DLLs 
                    in directory of pathname first.  However, Windows95
                    can sometimes not work correctly unless the absolute
                    path is used.  If GetFullPathName() fails, the LoadLibrary
                    will certainly fail too, so use its error code */
+
+               /* Don't display a message box when Python can't load a DLL */
+               old_mode = SetErrorMode(SEM_FAILCRITICALERRORS);
+
                if (GetFullPathName(pathname,
                                    sizeof(pathbuf),
                                    pathbuf,
@@ -183,6 +188,10 @@ dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
                        /* XXX This call doesn't exist in Windows CE */
                        hDLL = LoadLibraryEx(pathname, NULL,
                                             LOAD_WITH_ALTERED_SEARCH_PATH);
+
+               /* restore old error mode settings */
+               SetErrorMode(old_mode);
+
                if (hDLL==NULL){
                        char errBuf[256];
                        unsigned int errorCode;