[英]Strange Case of the missing method: SXS and Controls.Add results in “object doesn't support this property or method”?
[英]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.