The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#define PERL_NO_GET_CONTEXT
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#include "ppport.h"

#include <windows.h>
#define BUFF_SIZE 1024

MODULE = Win32::Unicode::Error  PACKAGE = Win32::Unicode::Error

PROTOTYPES: DISABLE

DWORD
get_last_error()
    CODE:
        RETVAL = GetLastError();
    OUTPUT:
        RETVAL

DWORD
set_last_error(long error_code)
    CODE:
        SetLastError(error_code);
        RETVAL = error_code;
    OUTPUT:
        RETVAL

SV*
foramt_message()
    CODE:
        WCHAR buff[BUFF_SIZE];

        FormatMessageW(
            FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
            NULL,
            GetLastError(),
            LANG_USER_DEFAULT,
            buff,
            BUFF_SIZE,
            NULL
        );

        RETVAL = newSVpvn(buff, wcslen(buff) * sizeof(WCHAR));
     OUTPUT:
        RETVAL