From: Christian Heimes Date: Wed, 23 Jan 2008 17:15:06 +0000 (+0000) Subject: Applied #1069410 X-Git-Tag: v2.6a1~449 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b2302ba9771d3c2795ae6c78d881b0c4715e2f63;p=thirdparty%2FPython%2Fcpython.git Applied #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. --- diff --git a/Misc/NEWS b/Misc/NEWS index 4c1080ae342a..9c083e2d0247 100644 --- 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. diff --git a/Python/dynload_win.c b/Python/dynload_win.c index 751790da2b12..7c71d9c198f9 100644 --- a/Python/dynload_win.c +++ b/Python/dynload_win.c @@ -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;