| 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 |
|---|