Sure, adding a correct prototype is just like including the correct header file if Windows 9Xreally supports this function. But you should be careful checking compiler versions, in case thatredefinition error occur.Actually, I encountered several redefinition problems during compilation. For example in w32term.c:#ifndef GLYPHSET/* Pre Windows 2000, this was not available, but define it here sothat Emacs compiled on such a platform will run on newer versions. */...#endifVC 11.0 does not define GLYPHSET either (or not included), but it does have the definitions,and above code leads to redefinition error.And this in w32term.c too:/* Reportedly, MSVC does not have this in its headers. */#ifdef _MSC_VERDECLARE_HANDLE(HMONITOR);#endifVC 11.0 does have HMONITOR, and another redefinition error.Maybe VC 11.0 has not been widely used, but these small problems should be resolved.2012/11/14 Eli Zaretskii <eliz@gnu.org>> Date: Tue, 13 Nov 2012 19:11:34 +0800
> From: À <iamliding@gmail.com>
>
> I tried to compile emacs 24.2 on Windows 7 with Visual C++ 11.0 Express,
> and I found that EnumSystemLocales in w32proc.c and w32select.c were
> compiled as is (not as __stdcall function with postfix decorations), which
> causes the linking failure.
>
> I read through the sources and found that config.h defined _WIN32_WINNT as
> 0x0400, which corresponds to Windows NT4. However MSDN says that
> EnumSystemLocales requires at least Windows 2000 (0x0500). So you should
> probably either require a higher Windows version or use some other
> mechanism to accomplish what EnumSystemLocales does.
Would adding a correct prototype for EnumSystemLocales to w32term.h
(included by both source files you mention) do the trick?
(I don't want to bump up _WIN32_WINNT, because that might produce an
executable which won't run on Windows 9X, which we still try to
support.)