簡體   English   中英

Windows腳本宿主-錯誤'800A01B6'對象不支持此屬性或方法

[英]Windows Script Host - Error '800A01B6' Object doesn't support this property or method

我的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位,並且dll僅針對64位平台進行編譯,以實現WSH的兼容性。

UPDATE

當我兩次使用相同的函數時也會發生此錯誤,如下所示:

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

WINAPI.WinAPI_EnumWindows 0
WINAPI.WinAPI_EnumWindows 0

當執行第二行時,它說:

錯誤800A01B6:對象不支持此屬性或方法'WinAPI_EnumWindows`。

我通過清除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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM