diff --git a/Python/dynload_win.c b/Python/dynload_win.c
index fc641b9..2b9e0be 100644
--- a/Python/dynload_win.c
+++ b/Python/dynload_win.c
@@ -183,33 +183,35 @@
 			hDLL = LoadLibraryEx(pathname, NULL,
 					     LOAD_WITH_ALTERED_SEARCH_PATH);
 		if (hDLL==NULL){
-			char errBuf[256];
+			PyObject *message;
 			unsigned int errorCode;
 
 			/* Get an error string from Win32 error code */
-			char theInfo[256]; /* Pointer to error text
+			wchar_t theInfo[256]; /* Pointer to error text
 					      from system */
 			int theLength; /* Length of error text */
 
 			errorCode = GetLastError();
 
-			theLength = FormatMessage(
-				FORMAT_MESSAGE_FROM_SYSTEM, /* flags */
+			theLength = FormatMessageW(
+				FORMAT_MESSAGE_FROM_SYSTEM |
+				FORMAT_MESSAGE_IGNORE_INSERTS, /* flags */
 				NULL, /* message source */
 				errorCode, /* the message (error) ID */
-				0, /* default language environment */
-				(LPTSTR) theInfo, /* the buffer */
+				MAKELANGID(LANG_NEUTRAL,
+					   SUBLANG_DEFAULT),
+				           /* Default language */
+				theInfo, /* the buffer */
 				sizeof(theInfo), /* the buffer size */
 				NULL); /* no additional format args. */
 
 			/* Problem: could not get the error message.
 			   This should not happen if called correctly. */
 			if (theLength == 0) {
-				PyOS_snprintf(errBuf, sizeof(errBuf),
-				      "DLL load failed with error code %d",
-					      errorCode);
+				message = PyUnicode_FromFormat(
+					"DLL load failed with error code %d",
+					errorCode);
 			} else {
-				size_t len;
 				/* For some reason a \r\n
 				   is appended to the text */
 				if (theLength >= 2 &&
@@ -218,13 +220,16 @@
 					theLength -= 2;
 					theInfo[theLength] = '\0';
 				}
-				strcpy(errBuf, "DLL load failed: ");
-				len = strlen(errBuf);
-				strncpy(errBuf+len, theInfo,
-					sizeof(errBuf)-len);
-				errBuf[sizeof(errBuf)-1] = '\0';
+				message = PyUnicode_FromString(
+					"DLL load failed: ");
+
+				PyUnicode_AppendAndDel(&message, 
+					PyUnicode_FromUnicode(
+						theInfo, 
+						theLength));
 			}
-			PyErr_SetString(PyExc_ImportError, errBuf);
+			PyErr_SetObject(PyExc_ImportError, message);
+			Py_XDECREF(message);
 			return NULL;
 		} else {
 			char buffer[256];
