oleacc.dll调用出错 - 访问被拒绝错误80020009

时间:2013-10-07 19:20:37

标签: c++ dll call functional-testing autoit

我正在为使用Internet Explorer_Server嵌入式控件的供应商的基于客户端的应用程序编写功能测试脚本。我正在努力获取对象,以便我可以阅读它的HTML并验证信息。我能够获得内部控件的句柄,我正在尝试使用oleacc.dll的ObjectFromLresult函数来获取对象。唉,由于80020009 Access被拒绝,它失败了。

我希望能让这个工作起来,或者至少知道它为什么会失败。这是代码:

DllCall("ole32.dll", "long", "CoInitialize", "ptr", 0)

Local $typUUID = DllStructCreate("int;short;short;byte[8]")
DllStructSetData($typUUID, 1, 0x626FC520)
DllStructSetData($typUUID, 2, 0xA41E)
DllStructSetData($typUUID, 3, 0x11CF)
DllStructSetData($typUUID, 4, 0xA7, 1)
DllStructSetData($typUUID, 4, 0x31, 2)
DllStructSetData($typUUID, 4, 0x0, 3)
DllStructSetData($typUUID, 4, 0xA0, 4)
DllStructSetData($typUUID, 4, 0xC9, 5)
DllStructSetData($typUUID, 4, 0x8, 6)
DllStructSetData($typUUID, 4, 0x26, 7)
DllStructSetData($typUUID, 4, 0x37, 8)
If IsDllStruct($typUUID) Then
    ConsoleWrite("$typUUID is a DLL Struct." & @LF)
Else
    ConsoleWrite("$typUUID is NOT a DLL Struct." & @LF)
EndIf

$lResult = 49263


Local $aRet = DllCall("oleacc.dll", _
    "long", "ObjectFromLresult", _
    "lresult", $lResult, _
    "struct*", $typUUID, _
    "wparam", 0, _
    "idispatch*", 0)
If @error Then Return SetError(3, @error, 0)


If IsObj($aRet[4]) Then
    ConsoleWrite("$aRet[4] is an object!" & @lf)
    Local $oIE = $aRet[4] .Script()
    ; $oIE is now a valid IDispatch object
    Return $oIE.Document.parentwindow
Else
    Return SetError(1, $aRet[0], 0)
EndIf

一些注意事项:

* IsDllStruct检查是successfun并报告$ typUUID是Dll Struct。

* $ lResult是Internet Explorer_Server内部/嵌入式控件的句柄。

*数组位置$ aRet [4]中的数据是一个对象。

* Return $oIE.Document.parentwindow

之前没有错误

1 个答案:

答案 0 :(得分:-2)

尝试使用

#include <IE.au3>

$oIE = _IEAttach("[REGEXPTITLE:ICQ; INSTANCE:2]", "embedded", 3)

此示例显示如何连接到使用嵌入式IE控件的ICQ客户端。