Ticket #1260: WinAPI_GetLastErrorMessageW.au3

File WinAPI_GetLastErrorMessageW.au3, 1.0 KB (added by danielkza, on Oct 31, 2009 at 4:51:39 PM)

WinAPI_GetLastErrorMessageW

Line 
1#include <WinAPI.au3>
2
3;Global Const $__WINAPCONSTANT_FORMAT_MESSAGE_FROM_SYSTEM = 0x1000
4Global Const $__WINAPCONSTANT_FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x100
5
6Func _WinAPI_GetLastErrorMessageW()
7 Local Const $iFlags = BitOR($__WINAPCONSTANT_FORMAT_MESSAGE_ALLOCATE_BUFFER, $__WINAPCONSTANT_FORMAT_MESSAGE_FROM_SYSTEM)
8 Local $tBufferPtr = DllStructCreate("ptr")
9
10 Local $aResult = DllCall("Kernel32.dll", "int", "FormatMessageW", _
11 "dword", $iFlags, "ptr", 0, "dword", _WinAPI_GetLastError(), "dword", 0, _
12 "ptr", DllStructGetPtr($tBufferPtr), "dword", 0, "ptr", 0)
13 If @error Then Return SetError(@error, 0, "")
14
15 Local $charCount = $aResult[0], $Text = ""
16 Local $tBuffer, $pBuffer = DllStructGetData($tBufferPtr, 1)
17 If $pBuffer Then
18 If $charCount > 0 Then
19 $tBuffer = DllStructCreate("wchar[" & ($charCount+1) & "]", $pBuffer)
20 $Text = DllStructGetData($tBuffer, 1)
21 EndIf
22 _WinAPI_LocalFree($pBuffer)
23 EndIf
24
25 Return $Text
26EndFunc