- Сообщения
- 3,999
- Репутация
- 967
Версия AutoIt 3.3.8.0
Обнаружил баг в функции ObjName. Дело в том, что по каким-то соображением, (непонятно каким) имена интерфейсов при компиляции меняются. Отсюда, к примеру, в UDF IE.au3 возникают ошибки при проверке интерфейса. В частности во внутренней функции __IEIsObjType. Это так же может сыграть злую шутку и в любом скрипте, где понадобится проверка имени возвращаемого интерфейса.
Для наглядности запустите пример не скомпилированный и поле компиляции.
Пример:
Обнаружил баг в функции ObjName. Дело в том, что по каким-то соображением, (непонятно каким) имена интерфейсов при компиляции меняются. Отсюда, к примеру, в UDF IE.au3 возникают ошибки при проверке интерфейса. В частности во внутренней функции __IEIsObjType. Это так же может сыграть злую шутку и в любом скрипте, где понадобится проверка имени возвращаемого интерфейса.
Для наглядности запустите пример не скомпилированный и поле компиляции.
Пример:
Код:
#include <IE.au3>
Global $sURL = 'http://ya.ru'
$oIE = _IECreate($sURL) ; Не меняется
If ObjName($oIE) = 'IWebBrowser2' Then
MsgBox(64, 'IWebBrowser2', ObjName($oIE))
Else
MsgBox(16, 'IWebBrowser2', ObjName($oIE))
EndIf
$oHTML = _IEDocGetObj($oIE) ; Прификс 'Disp'
If ObjName($oHTML) = 'DispHTMLDocument' Then
MsgBox(64, 'DispHTMLDocument', ObjName($oHTML))
Else
MsgBox(16, 'DispHTMLDocument', ObjName($oHTML))
EndIf
$oForm = _IEFormGetCollection($oIE,0) ; Прификс 'Disp'
If ObjName($oForm) = 'DispHTMLFormElement' Then
MsgBox(64, 'DispHTMLFormElement', ObjName($oForm))
Else
MsgBox(16, 'DispHTMLFormElement', ObjName($oForm))
EndIf
$oImg = _IEImgGetCollection ($oIE,0) ; Прификс 'Disp'
If ObjName($oImg) = 'DispHTMLImg' Then
MsgBox(64, 'DispHTMLImg', ObjName($oImg))
Else
MsgBox(16, 'DispHTMLImg', ObjName($oImg))
EndIf
$oLink = _IELinkGetCollection ($oIE,0) ; Прификс 'Disp'
If ObjName($oLink) = 'DispHTMLAnchorElement' Then
MsgBox(64, 'DispHTMLAnchorElement', ObjName($oLink))
Else
MsgBox(16, 'DispHTMLAnchorElement', ObjName($oLink))
EndIf
$oInput = _IETagNameGetCollection ($oIE, "input",0) ; Прификс 'Disp'
If ObjName($oInput) = 'DispHTMLInputElement' Then
MsgBox(64, 'DispHTMLInputElement', ObjName($oInput))
Else
MsgBox(16, 'DispHTMLInputElement', ObjName($oInput))
EndIf
$oTable = _IETableGetCollection($oIE,0) ; Прификс 'Disp'
If ObjName($oTable) = 'DispHTMLTable' Then
MsgBox(64, 'DispHTMLTable', ObjName($oTable))
Else
MsgBox(16, 'DispHTMLTable', ObjName($oTable))
EndIf
$oFlash = ObjCreate("ShockwaveFlash.ShockwaveFlash") ; Прификс 'I'
If ObjName($oFlash) = 'IShockwaveFlash' Then
MsgBox(64, 'IShockwaveFlash', ObjName($oFlash))
Else
MsgBox(16, 'IShockwaveFlash', ObjName($oFlash))
EndIf
$oWMPlayer = ObjCreate("WMPlayer.OCX") ; Полностью меняет название интерфейса
If ObjName($oWMPlayer) = 'IWMPPlayer4' Then
MsgBox(64, 'WMPPlayer4', ObjName($oWMPlayer))
Else
MsgBox(16, 'WMPPlayer4', ObjName($oWMPlayer))
EndIf
_IEQuit($oIE)