1 | #include <MsgBoxConstants.au3> |
---|
2 | |
---|
3 | ; AutoIt 3.1.1.x beta |
---|
4 | ; |
---|
5 | ; COM Test File |
---|
6 | ; |
---|
7 | ; Testing Error Event handling by creating a WMI exception |
---|
8 | |
---|
9 | Local $sMyCompName = @ComputerName |
---|
10 | |
---|
11 | ; Initialize my error handler |
---|
12 | Global $g_nComError, $g_oMyError = ObjEvent("AutoIt.Error", "MyErrFunc") |
---|
13 | |
---|
14 | ; Open WMI |
---|
15 | Local $oWMIservice = ObjGet("winmgmts:\\" & $sMyCompName & "\root\cimv2") |
---|
16 | |
---|
17 | ; Check is WMI opened successfully |
---|
18 | If @error Then |
---|
19 | MsgBox($MB_SYSTEMMODAL, "AutoItCOM Test", "Error getting object $oWMIservice. Error code: " & @error) |
---|
20 | Exit |
---|
21 | EndIf |
---|
22 | |
---|
23 | ; Here are the lines of code that cause the crash: |
---|
24 | ;workaround: $g_oMyError = Null |
---|
25 | $g_oMyError = ObjEvent("AutoIt.Error", "MyErrFunc") |
---|
26 | ; Try a query |
---|
27 | Local $oColProcessors = $oWMIservice.ExecQuery("Select * from Win32_Processor") |
---|
28 | ;workaround: $g_oMyError = Null |
---|
29 | $g_oMyError = ObjEvent("AutoIt.Error", "MyErrFunc") |
---|
30 | ; The crash occurs after this line. |
---|
31 | |
---|
32 | ; THIS line should deliberately fail! |
---|
33 | Local $vItem1 = $oColProcessors.item(1) |
---|
34 | |
---|
35 | If $g_nComError Then |
---|
36 | MsgBox($MB_SYSTEMMODAL, "AutoItCOM test", "Test passed: We got an error number: 0x" & Hex($g_nComError)) |
---|
37 | Else |
---|
38 | MsgBox($MB_SYSTEMMODAL, "AutoItCOM test", "Test failed!") |
---|
39 | EndIf |
---|
40 | |
---|
41 | Exit |
---|
42 | |
---|
43 | ; This is my custom error handler |
---|
44 | Func MyErrFunc() |
---|
45 | Local $sHexNumber = Hex($g_oMyError.number, 8) |
---|
46 | |
---|
47 | MsgBox($MB_SYSTEMMODAL, "AutoItCOM Test", "We intercepted a COM Error !" & @CRLF & @CRLF & _ |
---|
48 | "err.description is: " & @TAB & $g_oMyError.description & @CRLF & _ |
---|
49 | "err.windescription:" & @TAB & $g_oMyError.windescription & @CRLF & _ |
---|
50 | "err.number is: " & @TAB & $sHexNumber & @CRLF & _ |
---|
51 | "err.lastdllerror is: " & @TAB & $g_oMyError.lastdllerror & @CRLF & _ |
---|
52 | "err.scriptline is: " & @TAB & $g_oMyError.scriptline & @CRLF & _ |
---|
53 | "err.source is: " & @TAB & $g_oMyError.source & @CRLF & _ |
---|
54 | "err.helpfile is: " & @TAB & $g_oMyError.helpfile & @CRLF & _ |
---|
55 | "err.helpcontext is: " & @TAB & $g_oMyError.helpcontext _ |
---|
56 | ) |
---|
57 | |
---|
58 | $g_nComError = $g_oMyError.number |
---|
59 | EndFunc ;==>MyErrFunc |
---|