}
+#ifdef _MSC_VER
+extern void
+message_windows_error(const char* message, DWORD error_code)
+{
+ char *error_message;
+
+ if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER
+ | FORMAT_MESSAGE_FROM_SYSTEM
+ | FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL, error_code, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ (LPTSTR)&error_message, 0, NULL)) {
+ message_error("%s: %s", message, error_message);
+ }
+ else {
+ message_error("%s\n", message);
+ }
+
+ LocalFree(error_message);
+}
+#endif
+
+
extern const char *
message_strm(lzma_ret code)
{
extern void message_signal_handler(void);
+#ifdef _MSC_VER
+/// \brief Print an error message using a Windows specific error code
+///
+/// The function uses message_error() internally, so it will set the
+/// exit code to 1 after printing.
+///
+/// \param message Message describing where the error occurred
+/// \param error_code Error number from GetLastError()
+extern void
+message_windows_error(const char* message, DWORD error_code);
+
+#endif
+
+
/// Convert lzma_ret to a string.
extern const char *message_strm(lzma_ret code);