PyObject *ComError;
-static TCHAR *FormatError(DWORD code)
+static WCHAR *FormatError(DWORD code)
{
- TCHAR *lpMsgBuf;
+ WCHAR *lpMsgBuf;
DWORD n;
- n = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
- NULL,
- code,
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
- (LPTSTR) &lpMsgBuf,
- 0,
- NULL);
+ n = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
+ NULL,
+ code,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
+ (LPWSTR) &lpMsgBuf,
+ 0,
+ NULL);
if (n) {
- while (_istspace(lpMsgBuf[n-1]))
+ while (iswspace(lpMsgBuf[n-1]))
--n;
- lpMsgBuf[n] = _T('\0'); /* rstrip() */
+ lpMsgBuf[n] = L'\0'; /* rstrip() */
}
return lpMsgBuf;
}
#ifndef DONT_USE_SEH
void SetException(DWORD code, EXCEPTION_RECORD *pr)
{
- TCHAR *lpMsgBuf;
+ WCHAR *lpMsgBuf;
lpMsgBuf = FormatError(code);
if(lpMsgBuf) {
PyErr_SetFromWindowsErr(code);
DWORD helpcontext=0;
LPOLESTR progid;
PyObject *obj;
- TCHAR *text;
+ LPOLESTR text;
/* We absolutely have to release the GIL during COM method calls,
otherwise we may get a deadlock!
text = FormatError(errcode);
obj = Py_BuildValue(
-#ifdef _UNICODE
"iu(uuuiu)",
-#else
- "is(uuuiu)",
-#endif
errcode,
text,
descr, source, helpfile, helpcontext,
#ifdef MS_WIN32
-#ifdef _UNICODE
-# define PYBUILD_TSTR "u"
-#else
-# define PYBUILD_TSTR "s"
-# ifndef _T
-# define _T(text) text
-# endif
-#endif
-
static char format_error_doc[] =
"FormatError([integer]) -> string\n\
\n\
static PyObject *format_error(PyObject *self, PyObject *args)
{
PyObject *result;
- TCHAR *lpMsgBuf;
+ wchar_t *lpMsgBuf;
DWORD code = 0;
if (!PyArg_ParseTuple(args, "|i:FormatError", &code))
return NULL;
code = GetLastError();
lpMsgBuf = FormatError(code);
if (lpMsgBuf) {
- result = Py_BuildValue(PYBUILD_TSTR, lpMsgBuf);
+ result = PyUnicode_FromWideChar(lpMsgBuf, wcslen(lpMsgBuf));
LocalFree(lpMsgBuf);
} else {
- result = Py_BuildValue("s", "<no description>");
+ result = PyUnicode_FromString("<no description>");
}
return result;
}