【问题标题】:Windows Script Host - Error '800A01B6' Object doesn't support this property or methodWindows 脚本宿主 - 错误“800A01B6”对象不支持此属性或方法
【发布时间】:2017-12-20 10:21:40
【问题描述】:

我的 C++ Windows API 包装器 dll 出现一个奇怪的错误。我已经用这个 dll 向 COM 公开了六种方法。当我单独使用它们时,每个函数都可以工作,但是当我在 VBScript 中使用 COM 公开的方法时,例如:

Dim AutoItX3: Set AutoItX3 = WScript.CreateObject("AutoItX3.Control")
Dim WINAPI: Set WINAPI = WScript.CreateObject("WinAPIWrapperLib.WINAPI")

WINAPI.WinAPI_EnumWindows 0

WINAPI.WinAPI_ShowWindow CLng("&h" + Replace(AutoItX3.WinGetHandle("[CLASS:Notepad]"), "0x", "")), 1

EnumWindows 工作正常,但是当 WSH 到达ShowWindow 行时,它会说:

错误 800A01B6:对象不支持此属性或方法“WinAPI_ShowWindow”。

但是为什么会这样呢?这个对象支持这个方法并且很好地实现了。

当我只使用ShowWindow 时:

Dim AutoItX3: Set AutoItX3 = WScript.CreateObject("AutoItX3.Control")
Dim WINAPI: Set WINAPI = WScript.CreateObject("WinAPIWrapperLib.WINAPI")

WINAPI.WinAPI_ShowWindow CLng("&h" + Replace(AutoItX3.WinGetHandle("[CLASS:Notepad]"), "0x", "")), 1

它没有任何问题。使用上面的这两个函数可以很容易地重现此错误。

我是如何实现 COM 类的:

coclass WinAPI
{
    [default] interface IWinAPI;
    [default, source] dispinterface _IWinAPIEvents;
};

我运行上面脚本的系统是 Windows 7 64 位,为了 WSH 的兼容性,dll 仅针对 64 位平台编译。

更新

当我使用相同的函数两次时也会发生此错误,如下所示:

Dim WINAPI: Set WINAPI = WScript.CreateObject("WinAPIWrapperLib.WINAPI")

WINAPI.WinAPI_EnumWindows 0
WINAPI.WinAPI_EnumWindows 0

在执行第二行时,它说:

错误 800A01B6:对象不支持此属性或方法 'WinAPI_EnumWindows`。

【问题讨论】:

    标签: c++ vbscript com atl wsh


    【解决方案1】:

    我通过清除EnumWindowsProc 回调函数使用的BSTR 变量解决了错误,如下所示:

    BSTR WindowClassName; //<< DECLARATION >>
    
    RealGetWindowClass(hWnd, WindowClassName, 8192); // << USAGE IN EnumWindowsProc >>
    
    STDMETHODIMP CWinAPI::WinAPI_EnumWindows(int lParam)
    {   
        SysFreeString(WindowClassName); // << CLEARING >>
    
        EnumWindows(EnumWindowsProc, lParam);
    
        SysFreeString(WindowClassName); // << CLEARING >>
    
        return S_OK;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-01-20
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 1970-01-01
      • 2011-02-14
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      相关资源
      最近更新 更多