Автор |
Сообщение |
|
|
Заголовок сообщения: |
|
|
|
Код: hres = CoCreateInstance( CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, ( LPVOID* ) &pLoc );
Возвращает ошибку: 0x80040154 (класс не зарегистрирован )
Действительно такого класса в реестре нет. Как его зарегистрировать?
[code]hres = CoCreateInstance( CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, ( LPVOID* ) &pLoc );[/code]
Возвращает ошибку: 0x80040154 (класс не зарегистрирован )
Действительно такого класса в реестре нет. Как его зарегистрировать?
|
|
|
|
Добавлено: Чт апр 30, 2009 11:17 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
spf писал(а): Вызывает подозрение алфавитный порядок методов в IID_IWbemClassObject. Это же VMT, и каждый метод имеет в ней свой номер — с ним должен совпадать и порядковый номер метода при описании интерфейса (именно этим путем он и вычисляется, см. определение слова "Method:" в COM.F).
Да, спасибо. После правильного перечисления методов все заработало.
Дополнительно понадобилось перейти на использование структуры VARIANT,
как это описано в файле variant.f
Вообще, странно: в SDK идущего вместе с Visual C 6.0 методы перечислены
в правильном порядке, а в SDK от 2003 сервера (скачан с сайта Microsoft)
методы перечислены в алфавитном порядке.
[quote="spf"]Вызывает подозрение алфавитный порядок методов в IID_IWbemClassObject. Это же VMT, и каждый метод имеет в ней свой номер — с ним должен совпадать и порядковый номер метода при описании интерфейса (именно этим путем он и вычисляется, см. определение слова "Method:" в COM.F).[/quote]
Да, спасибо. После правильного перечисления методов все заработало.
Дополнительно понадобилось перейти на использование структуры VARIANT,
как это описано в файле variant.f
Вообще, странно: в SDK идущего вместе с Visual C 6.0 методы перечислены
в правильном порядке, а в SDK от 2003 сервера (скачан с сайта Microsoft)
методы перечислены в алфавитном порядке.
|
|
|
|
Добавлено: Чт июн 12, 2008 09:16 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Вызывает подозрение алфавитный порядок методов в IID_IWbemClassObject.
Это же VMT, и каждый метод имеет в ней свой номер — с ним должен совпадать и порядковый номер метода при описании интерфейса (именно этим путем он и вычисляется, см. определение слова "Method:" в COM.F).
Вызывает подозрение алфавитный порядок методов в IID_IWbemClassObject.
Это же VMT, и каждый метод имеет в ней свой номер — с ним должен совпадать и порядковый номер метода при описании интерфейса (именно этим путем он и вычисляется, см. определение слова "Method:" в COM.F).
|
|
|
|
Добавлено: Вт июн 10, 2008 18:53 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Вот тестовый пример. Возникла очередная трудность:
когда дело доходит до непосредственного получения интересующих полей через метод ::Get
возвращаются коды ошибок.
При вызове слова GetClass, код ошибки: WBEM_E_SYSTEM_PROPERTY = 0x80041030
при вызове слова GetDay, код ошибки: WBEM_E_FAILED = 0x80041001
Подскажите, что не так.
Все предыдущие слова работают без проблем.
Код: .( Test1...) CR
REQUIRE CoInitializeEx ~ac/lib/win/com/com.f
WINAPI: CoInitializeSecurity OLE32.DLL WINAPI: CoSetProxyBlanket OLE32.DLL
\ RPCDCE.H 0 CONSTANT RPC_C_AUTHN_LEVEL_DEFAULT \ Default authentication 3 CONSTANT RPC_C_IMP_LEVEL_IMPERSONATE \ 0 CONSTANT EOAC_NONE \ objidl.h
3 CONSTANT RPC_C_AUTHN_LEVEL_CALL 0 CONSTANT RPC_C_AUTHZ_NONE 10 CONSTANT RPC_C_AUTHN_WINNT
0x20 CONSTANT WBEM_FLAG_FORWARD_ONLY 0x10 CONSTANT WBEM_FLAG_RETURN_IMMEDIATELY 0xFFFFFFFF CONSTANT WBEM_INFINITE
0 CONSTANT NULL
CREATE CLSID_WbemLocator S" {4590F811-1D3A-11D0-891F-00AA004B2E24}" CLSID, 0 , 0 , 0 ,
IID_IUnknown Interface: IID_IWbemLocator {DC12A687-737F-11CF-884D-00AA004B2E24} Method: ::ConnectServer Interface;
IID_IUnknown Interface: IID_IWbemServices {9556DC99-828C-11CF-A37E-00AA003240C7} Method: ::OpenNamespace Method: ::CancelAsyncCall Method: ::QueryObjectSink Method: ::GetObject Method: ::GetObjectAsync
Method: ::PutClass Method: ::PutClassAsync Method: ::DeleteClass Method: ::DeleteClassAsync Method: ::CreateClassEnum Method: ::CreateClassEnumAsync Method: ::PutInstance Method: ::PutInstanceAsync
Method: ::DeleteInstance Method: ::DeleteInstanceAsync
Method: ::CreateInstanceEnum Method: ::CreateInstanceEnumAsync
Method: ::ExecQuery Method: ::ExecQueryAsync
Method: ::ExecNotificationQuery Method: ::ExecNotificationQueryAsync Method: ::ExecMethod Method: ::ExecMethodAsync Interface;
\ IEnumWbemClassObject *pEnumerator IID_IUnknown Interface: IID_IEnumWbemClassObject {027947E1-D731-11CE-A357-000000000001} Method: ::CloneEnum Method: ::NextEnum Method: ::NextAsync Method: ::Reset Method: ::Skip Interface;
\ IWbemClassObject *pclsObj; IID_IUnknown Interface: IID_IWbemClassObject {DC12A681-737F-11CF-884D-00AA004B2E24} Method: ::BeginEnumeration Method: ::BeginMethodEnumeration Method: ::CloneClass Method: ::CompareTo Method: ::Delete Method: ::DeleteMethod Method: ::EndEnumeration Method: ::EndMethodEnumeration Method: ::Get Method: ::GetMethod
Method: ::GetMethodOrigin Method: ::GetMethodQualifierSet Method: ::GetNames Method: ::GetObjectText
Method: ::GetPropertyOrigin
Method: ::GetPropertyQualifierSet Method: ::GetQualifierSet Method: ::InheritsFrom
Method: ::NextClass
Method: ::NextMethod Method: ::Put Method: ::PutMethod Method: ::SpawnDerivedClass
Method: ::SpawnInstance Interface;
: .h ( x -- ) BASE @ SWAP HEX 8 .0 BASE ! ;
0 VALUE MYVAR
VARIABLE pLoc VARIABLE pSvc VARIABLE pEnumerator
VARIABLE pclsObj VARIABLE uReturn VARIABLE vtProp
: SecurInit ( -- ior ) NULL EOAC_NONE NULL RPC_C_IMP_LEVEL_IMPERSONATE RPC_C_AUTHN_LEVEL_DEFAULT NULL NULL -1 NULL CoInitializeSecurity ;
\ hres = CoCreateInstance( \ CLSID_WbemLocator, \ 0, \ CLSCTX_INPROC_SERVER, \ IID_IWbemLocator, (LPVOID *) &pLoc);
: CoCreateInstanceF ( -- x ) pLoc IID_IWbemLocator CLSCTX_INPROC_SERVER 0 CLSID_WbemLocator CoCreateInstance ;
\ ================================= \ IWbemServices *pSvc = NULL;
\ // Connect to the root\cimv2 namespace with \ // the current user and obtain pointer pSvc \ // to make IWbemServices calls. \ hres = pLoc->ConnectServer( \ _bstr_t(L"ROOT\\WMI"), // Object path of WMI namespace \ NULL, // User name. NULL = current user \ NULL, // User password. NULL = current \ 0, // Locale. NULL indicates current \ NULL, // Security flags. \ 0, // Authority (e.g. Kerberos) \ 0, // Context object \ &pSvc // pointer to IWbemServices proxy \ );
: ConnectServerF ( -- ) pSvc \ &pSvc // pointer to IWbemServices proxy 0 \ 0, // Context object 0 \ 0, // Authority (e.g. Kerberos) NULL \ NULL, // Security flags. 0 \ 0, // Locale. NULL indicates current NULL \ NULL, // User password. NULL = current NULL \ NULL, // User name. NULL = current user \ S" ROOT\WMI" >BSTR \ _bstr_t(L"ROOT\\WMI"), // Object path of WMI namespace S" ROOT\CIMV2" >BSTR \ _bstr_t(L"ROOT\\CIMV2"), // Object path of WMI namespace pLoc @ ::ConnectServer ;
\ // Step 5: -------------------------------------------------- \ // Set security levels on the proxy ------------------------- \ \ hres = CoSetProxyBlanket( \ pSvc, // Indicates the proxy to set \ RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxx \ RPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxx \ NULL, // Server principal name \ RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxx \ RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx \ NULL, // client identity \ EOAC_NONE // proxy capabilities \ );
: CoSetProxyBlanketF ( -- x ) EOAC_NONE \ EOAC_NONE // proxy capabilities NULL \ NULL, // client identity RPC_C_IMP_LEVEL_IMPERSONATE \ // RPC_C_IMP_LEVEL_xxx RPC_C_AUTHN_LEVEL_CALL \ // RPC_C_AUTHN_LEVEL_xxx NULL \ // Server principal name RPC_C_AUTHZ_NONE \ // RPC_C_AUTHZ_xxx RPC_C_AUTHN_WINNT \ // RPC_C_AUTHN_xxx pSvc @ \ // Indicates the proxy to set CoSetProxyBlanket ;
\ hres = pSvc->ExecQuery( \ bstr_t("WQL"), \ bstr_t("SELECT * FROM XSIA01STAT_OID"), \ WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, \ NULL, \ &pEnumerator);
: ExecQueryF ( -- x ) pEnumerator NULL WBEM_FLAG_FORWARD_ONLY WBEM_FLAG_RETURN_IMMEDIATELY OR S" SELECT * FROM Win32_CurrentTime" >BSTR S" WQL" >BSTR pSvc @ ::ExecQuery ;
\ ----------------------------------------------- \ HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, \ &pclsObj, &uReturn); : Enumerator_Next ( -- x ) uReturn pclsObj 1 WBEM_INFINITE pEnumerator @ ::NextEnum ;
\ ----------------------------------------------- \ hr = pclsObj->Get(strClassProp, 0, &v, 0, 0); : GetClass ( -- x ) 0 0 vtProp S" __CLASS" >BSTR pclsObj @ ::Get ;
\ ----------------------------------------------- \ hr = pclsObj->Get(L"Day", 0, &vtProp, 0, 0); : GetDay ( -- x ) 0 0 vtProp 0 S" Day" >BSTR pclsObj @ ::Get ;
: TEST3 0 pLoc ! 0 pSvc ! 0 pEnumerator ! 0 pclsObj ! 0 uReturn !
HERE TO MYVAR MYVAR vtProp ! 64 ALLOT vtProp @ 64 0 FILL
ComInit DUP ." ComInit = " .h CR IF ." Can not ComInit" CR EXIT THEN
SecurInit DUP ." CoInitializeSecurity = " .h CR IF ." Can not CoInitializeSecurity" CR EXIT THEN
CoCreateInstanceF ." CreateInstance = " .h ." pLoc = " pLoc @ .h CR pLoc @ 0= IF ." Can not CreateInstance" CR EXIT THEN
ConnectServerF ." ConnectServer = " .h SPACE ." pSvc = " pSvc @ .h CR pSvc @ 0= IF ." Can not ConnectServer" CR EXIT THEN
CoSetProxyBlanketF DUP ." CoSetProxyBlanket = " .h SPACE ." pSvc = " pSvc @ .h CR IF ." Can not CoSetProxyBlanket" CR EXIT THEN
ExecQueryF ." ExecQueryF = " .h SPACE ." pEnumerator = " pEnumerator @ .h CR pEnumerator @ 0= IF ." Can not ExecQueryF" CR EXIT THEN
Enumerator_Next ." Enumerator_Next = " .h SPACE ." uReturn = " uReturn @ .h SPACE ." pclsObj = " pclsObj @ .h CR uReturn @ 0= IF ." Can not Enumerator_Next" CR EXIT THEN
\ WBEM_E_SYSTEM_PROPERTY = 0x80041030 GetClass DUP ." GetCLASS = " .h SPACE ." vtProp = " vtProp @ .h CR IF ." Can not GetClass" CR EXIT THEN
\ WBEM_E_FAILED = 0x80041001 GetDay DUP ." Get33 = " .h SPACE ." vtProp = " vtProp @ .h CR IF ." Can not GetDay" CR EXIT THEN ;
S" TEST.EXE" SAVE BYE
Вот тестовый пример. Возникла очередная трудность:
когда дело доходит до непосредственного получения интересующих полей через метод ::Get
возвращаются коды ошибок.
При вызове слова GetClass, код ошибки: WBEM_E_SYSTEM_PROPERTY = 0x80041030
при вызове слова GetDay, код ошибки: WBEM_E_FAILED = 0x80041001
Подскажите, что не так.
Все предыдущие слова работают без проблем.
[code] .( Test1...) CR
REQUIRE CoInitializeEx ~ac/lib/win/com/com.f
WINAPI: CoInitializeSecurity OLE32.DLL WINAPI: CoSetProxyBlanket OLE32.DLL
\ RPCDCE.H 0 CONSTANT RPC_C_AUTHN_LEVEL_DEFAULT \ Default authentication 3 CONSTANT RPC_C_IMP_LEVEL_IMPERSONATE \ 0 CONSTANT EOAC_NONE \ objidl.h
3 CONSTANT RPC_C_AUTHN_LEVEL_CALL 0 CONSTANT RPC_C_AUTHZ_NONE 10 CONSTANT RPC_C_AUTHN_WINNT
0x20 CONSTANT WBEM_FLAG_FORWARD_ONLY 0x10 CONSTANT WBEM_FLAG_RETURN_IMMEDIATELY 0xFFFFFFFF CONSTANT WBEM_INFINITE
0 CONSTANT NULL
CREATE CLSID_WbemLocator S" {4590F811-1D3A-11D0-891F-00AA004B2E24}" CLSID, 0 , 0 , 0 ,
IID_IUnknown Interface: IID_IWbemLocator {DC12A687-737F-11CF-884D-00AA004B2E24} Method: ::ConnectServer Interface;
IID_IUnknown Interface: IID_IWbemServices {9556DC99-828C-11CF-A37E-00AA003240C7} Method: ::OpenNamespace Method: ::CancelAsyncCall Method: ::QueryObjectSink Method: ::GetObject Method: ::GetObjectAsync
Method: ::PutClass Method: ::PutClassAsync Method: ::DeleteClass Method: ::DeleteClassAsync Method: ::CreateClassEnum Method: ::CreateClassEnumAsync Method: ::PutInstance Method: ::PutInstanceAsync
Method: ::DeleteInstance Method: ::DeleteInstanceAsync
Method: ::CreateInstanceEnum Method: ::CreateInstanceEnumAsync
Method: ::ExecQuery Method: ::ExecQueryAsync
Method: ::ExecNotificationQuery Method: ::ExecNotificationQueryAsync Method: ::ExecMethod Method: ::ExecMethodAsync Interface;
\ IEnumWbemClassObject *pEnumerator IID_IUnknown Interface: IID_IEnumWbemClassObject {027947E1-D731-11CE-A357-000000000001} Method: ::CloneEnum Method: ::NextEnum Method: ::NextAsync Method: ::Reset Method: ::Skip Interface;
\ IWbemClassObject *pclsObj; IID_IUnknown Interface: IID_IWbemClassObject {DC12A681-737F-11CF-884D-00AA004B2E24} Method: ::BeginEnumeration Method: ::BeginMethodEnumeration Method: ::CloneClass Method: ::CompareTo Method: ::Delete Method: ::DeleteMethod Method: ::EndEnumeration Method: ::EndMethodEnumeration Method: ::Get Method: ::GetMethod
Method: ::GetMethodOrigin Method: ::GetMethodQualifierSet Method: ::GetNames Method: ::GetObjectText
Method: ::GetPropertyOrigin
Method: ::GetPropertyQualifierSet Method: ::GetQualifierSet Method: ::InheritsFrom
Method: ::NextClass
Method: ::NextMethod Method: ::Put Method: ::PutMethod Method: ::SpawnDerivedClass
Method: ::SpawnInstance Interface;
: .h ( x -- ) BASE @ SWAP HEX 8 .0 BASE ! ;
0 VALUE MYVAR
VARIABLE pLoc VARIABLE pSvc VARIABLE pEnumerator
VARIABLE pclsObj VARIABLE uReturn VARIABLE vtProp
: SecurInit ( -- ior ) NULL EOAC_NONE NULL RPC_C_IMP_LEVEL_IMPERSONATE RPC_C_AUTHN_LEVEL_DEFAULT NULL NULL -1 NULL CoInitializeSecurity ;
\ hres = CoCreateInstance( \ CLSID_WbemLocator, \ 0, \ CLSCTX_INPROC_SERVER, \ IID_IWbemLocator, (LPVOID *) &pLoc);
: CoCreateInstanceF ( -- x ) pLoc IID_IWbemLocator CLSCTX_INPROC_SERVER 0 CLSID_WbemLocator CoCreateInstance ;
\ ================================= \ IWbemServices *pSvc = NULL;
\ // Connect to the root\cimv2 namespace with \ // the current user and obtain pointer pSvc \ // to make IWbemServices calls. \ hres = pLoc->ConnectServer( \ _bstr_t(L"ROOT\\WMI"), // Object path of WMI namespace \ NULL, // User name. NULL = current user \ NULL, // User password. NULL = current \ 0, // Locale. NULL indicates current \ NULL, // Security flags. \ 0, // Authority (e.g. Kerberos) \ 0, // Context object \ &pSvc // pointer to IWbemServices proxy \ );
: ConnectServerF ( -- ) pSvc \ &pSvc // pointer to IWbemServices proxy 0 \ 0, // Context object 0 \ 0, // Authority (e.g. Kerberos) NULL \ NULL, // Security flags. 0 \ 0, // Locale. NULL indicates current NULL \ NULL, // User password. NULL = current NULL \ NULL, // User name. NULL = current user \ S" ROOT\WMI" >BSTR \ _bstr_t(L"ROOT\\WMI"), // Object path of WMI namespace S" ROOT\CIMV2" >BSTR \ _bstr_t(L"ROOT\\CIMV2"), // Object path of WMI namespace pLoc @ ::ConnectServer ;
\ // Step 5: -------------------------------------------------- \ // Set security levels on the proxy ------------------------- \ \ hres = CoSetProxyBlanket( \ pSvc, // Indicates the proxy to set \ RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxx \ RPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxx \ NULL, // Server principal name \ RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxx \ RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx \ NULL, // client identity \ EOAC_NONE // proxy capabilities \ );
: CoSetProxyBlanketF ( -- x ) EOAC_NONE \ EOAC_NONE // proxy capabilities NULL \ NULL, // client identity RPC_C_IMP_LEVEL_IMPERSONATE \ // RPC_C_IMP_LEVEL_xxx RPC_C_AUTHN_LEVEL_CALL \ // RPC_C_AUTHN_LEVEL_xxx NULL \ // Server principal name RPC_C_AUTHZ_NONE \ // RPC_C_AUTHZ_xxx RPC_C_AUTHN_WINNT \ // RPC_C_AUTHN_xxx pSvc @ \ // Indicates the proxy to set CoSetProxyBlanket ;
\ hres = pSvc->ExecQuery( \ bstr_t("WQL"), \ bstr_t("SELECT * FROM XSIA01STAT_OID"), \ WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, \ NULL, \ &pEnumerator);
: ExecQueryF ( -- x ) pEnumerator NULL WBEM_FLAG_FORWARD_ONLY WBEM_FLAG_RETURN_IMMEDIATELY OR S" SELECT * FROM Win32_CurrentTime" >BSTR S" WQL" >BSTR pSvc @ ::ExecQuery ;
\ ----------------------------------------------- \ HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, \ &pclsObj, &uReturn); : Enumerator_Next ( -- x ) uReturn pclsObj 1 WBEM_INFINITE pEnumerator @ ::NextEnum ;
\ ----------------------------------------------- \ hr = pclsObj->Get(strClassProp, 0, &v, 0, 0); : GetClass ( -- x ) 0 0 vtProp S" __CLASS" >BSTR pclsObj @ ::Get ;
\ ----------------------------------------------- \ hr = pclsObj->Get(L"Day", 0, &vtProp, 0, 0); : GetDay ( -- x ) 0 0 vtProp 0 S" Day" >BSTR pclsObj @ ::Get ;
: TEST3 0 pLoc ! 0 pSvc ! 0 pEnumerator ! 0 pclsObj ! 0 uReturn !
HERE TO MYVAR MYVAR vtProp ! 64 ALLOT vtProp @ 64 0 FILL
ComInit DUP ." ComInit = " .h CR IF ." Can not ComInit" CR EXIT THEN
SecurInit DUP ." CoInitializeSecurity = " .h CR IF ." Can not CoInitializeSecurity" CR EXIT THEN
CoCreateInstanceF ." CreateInstance = " .h ." pLoc = " pLoc @ .h CR pLoc @ 0= IF ." Can not CreateInstance" CR EXIT THEN
ConnectServerF ." ConnectServer = " .h SPACE ." pSvc = " pSvc @ .h CR pSvc @ 0= IF ." Can not ConnectServer" CR EXIT THEN
CoSetProxyBlanketF DUP ." CoSetProxyBlanket = " .h SPACE ." pSvc = " pSvc @ .h CR IF ." Can not CoSetProxyBlanket" CR EXIT THEN
ExecQueryF ." ExecQueryF = " .h SPACE ." pEnumerator = " pEnumerator @ .h CR pEnumerator @ 0= IF ." Can not ExecQueryF" CR EXIT THEN
Enumerator_Next ." Enumerator_Next = " .h SPACE ." uReturn = " uReturn @ .h SPACE ." pclsObj = " pclsObj @ .h CR uReturn @ 0= IF ." Can not Enumerator_Next" CR EXIT THEN
\ WBEM_E_SYSTEM_PROPERTY = 0x80041030 GetClass DUP ." GetCLASS = " .h SPACE ." vtProp = " vtProp @ .h CR IF ." Can not GetClass" CR EXIT THEN
\ WBEM_E_FAILED = 0x80041001 GetDay DUP ." Get33 = " .h SPACE ." vtProp = " vtProp @ .h CR IF ." Can not GetDay" CR EXIT THEN ;
S" TEST.EXE" SAVE BYE [/code]
|
|
|
|
Добавлено: Вт июн 10, 2008 16:29 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Поиск "variant" по devel дает десяток либ или примеров.
Поиск "variant" по devel дает десяток либ или примеров.
|
|
|
|
Добавлено: Вт июн 10, 2008 00:00 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Avchent писал(а): А как можно в SP-Forth использовать структуру С типа VARIANT ?
Думаю также как и любую другую структуру/объединение
[quote="Avchent"]А как можно в SP-Forth использовать структуру С типа VARIANT ?[/quote]
Думаю также как и любую другую структуру/объединение :)
|
|
|
|
Добавлено: Пн июн 09, 2008 23:47 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
spf писал(а): А как может быть вызван метод ConnectServer, который работает? Думаю, дело в некорректом объявлении IID_IWbemServices. По идее, если пойти через IID_IDispatch — будет проще: тогда не надо объявлять все методы интерфейса, а вызов делается через позднее связывание.
Спасибо, когда добавил все методы в объявление IID_IWbemServices, сразу стал корректно вызываться и метод ::ExecQuery.
А как можно в SP-Forth использовать структуру С типа VARIANT ?
(c IID_IDispatch позже разберусь)
[quote="spf"] А как может быть вызван метод ConnectServer, который работает? :)
Думаю, дело в некорректом объявлении IID_IWbemServices. По идее, если пойти через IID_IDispatch — будет проще: тогда не надо объявлять все методы интерфейса, а вызов делается через позднее связывание.[/quote]
Спасибо, когда добавил все методы в объявление IID_IWbemServices, сразу стал корректно вызываться и метод ::ExecQuery.
А как можно в SP-Forth использовать структуру С типа VARIANT ?
(c IID_IDispatch позже разберусь)
|
|
|
|
Добавлено: Пн июн 09, 2008 20:25 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
[Quote]мне не понятно как может быть вызван метод ::ExecQuery [/Quote]
А как может быть вызван метод ConnectServer, который работает?
Думаю, дело в некорректом объявлении IID_IWbemServices. По идее, если пойти через IID_IDispatch — будет проще: тогда не надо объявлять все методы интерфейса, а вызов делается через позднее связывание.
[Quote]мне не понятно как может быть вызван метод ::ExecQuery [/Quote]
А как может быть вызван метод ConnectServer, который работает? :)
Думаю, дело в некорректом объявлении IID_IWbemServices. По идее, если пойти через IID_IDispatch — будет проще: тогда не надо объявлять все методы интерфейса, а вызов делается через позднее связывание.
|
|
|
|
Добавлено: Вс июн 08, 2008 21:07 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
mOleg писал(а): подозреваю, надо порядо следования параметров реверсировать (или проверить), наиболее вероятная причина.
Действительно, был неправильный порядок параметров при вызове ConnectServer.
Спасибо.
Теперь новая беда
Ошибка при вызове ExecQueryF (метод ::ExecQuery)
Выдается ошибка 0xC0000005.
Когда на C я объявляю объект pSvc, то я указываю его тип (от кого он унаследован) и при вызове метода ExecQuery ясно к какому классу его относить.
Здесь же я объявил VARIABLE pSvc и никакой связи, с IID_ IWbemServices нет, поэтому мне не понятно как может быть вызван метод ::ExecQuery
Код: REQUIRE CoInitializeEx ~ac/lib/win/com/com.f
WINAPI: CoInitializeSecurity OLE32.DLL WINAPI: CoSetProxyBlanket OLE32.DLL
\ RPCDCE.H 0 CONSTANT RPC_C_AUTHN_LEVEL_DEFAULT \ Default authentication 3 CONSTANT RPC_C_IMP_LEVEL_IMPERSONATE \ 0 CONSTANT EOAC_NONE \ objidl.h
3 CONSTANT RPC_C_AUTHN_LEVEL_CALL 0 CONSTANT RPC_C_AUTHZ_NONE 10 CONSTANT RPC_C_AUTHN_WINNT
0x20 CONSTANT WBEM_FLAG_FORWARD_ONLY 0x10 CONSTANT WBEM_FLAG_RETURN_IMMEDIATELY
0 CONSTANT NULL
CREATE CLSID_WbemLocator S" {4590F811-1D3A-11D0-891F-00AA004B2E24}" CLSID, 0 , 0 , 0 ,
IID_IUnknown Interface: IID_IWbemLocator {DC12A687-737F-11CF-884D-00AA004B2E24} Method: ::ConnectServer ( a b -- x y ) Interface;
IID_IUnknown Interface: IID_IWbemServices {9556dc99-828c-11cf-a37e-00aa003240c7} Method: ::ExecQuery Interface;
VARIABLE pLoc VARIABLE pSvc VARIABLE pEnumerator
: .h ( x -- ) BASE @ SWAP HEX 8 .0 BASE ! ;
: SecurInit ( -- ior ) NULL EOAC_NONE NULL RPC_C_IMP_LEVEL_IMPERSONATE RPC_C_AUTHN_LEVEL_DEFAULT NULL NULL -1 NULL CoInitializeSecurity ;
\ C from SDK \ hres = CoCreateInstance( \ CLSID_WbemLocator, \ 0, \ CLSCTX_INPROC_SERVER, \ IID_IWbemLocator, (LPVOID *) &pLoc);
: CoCreateInstanceF ( -- x ) pLoc IID_IWbemLocator CLSCTX_INPROC_SERVER 0 CLSID_WbemLocator CoCreateInstance ;
\ C from SDK \ ================================= \ IWbemServices *pSvc = NULL;
\ // Connect to the root\cimv2 namespace with \ // the current user and obtain pointer pSvc \ // to make IWbemServices calls. \ hres = pLoc->ConnectServer( \ _bstr_t(L"ROOT\\WMI"), // Object path of WMI namespace \ NULL, // User name. NULL = current user \ NULL, // User password. NULL = current \ 0, // Locale. NULL indicates current \ NULL, // Security flags. \ 0, // Authority (e.g. Kerberos) \ 0, // Context object \ &pSvc // pointer to IWbemServices proxy \ );
: ConnectServerF ( -- ) pSvc \ &pSvc // pointer to IWbemServices proxy 0 \ 0, // Context object 0 \ 0, // Authority (e.g. Kerberos) NULL \ NULL, // Security flags. 0 \ 0, // Locale. NULL indicates current NULL \ NULL, // User password. NULL = current NULL \ NULL, // User name. NULL = current user S" ROOT\CIMV2" >BSTR \ _bstr_t(L"ROOT\\CIMV2"), // Object path of WMI namespace pLoc @ ::ConnectServer ;
\ C from SDK \ // Step 5: -------------------------------------------------- \ // Set security levels on the proxy ------------------------- \ \ hres = CoSetProxyBlanket( \ pSvc, // Indicates the proxy to set \ RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxx \ RPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxx \ NULL, // Server principal name \ RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxx \ RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx \ NULL, // client identity \ EOAC_NONE // proxy capabilities \ );
: CoSetProxyBlanketF ( -- x ) EOAC_NONE \ EOAC_NONE // proxy capabilities NULL \ NULL, // client identity RPC_C_IMP_LEVEL_IMPERSONATE \ // RPC_C_IMP_LEVEL_xxx RPC_C_AUTHN_LEVEL_CALL \ // RPC_C_AUTHN_LEVEL_xxx NULL \ // Server principal name RPC_C_AUTHZ_NONE \ // RPC_C_AUTHZ_xxx RPC_C_AUTHN_WINNT \ // RPC_C_AUTHN_xxx pSvc @ \ // Indicates the proxy to set CoSetProxyBlanket ;
\ C from SDK \ hres = pSvc->ExecQuery( \ bstr_t("WQL"), \ bstr_t("SELECT * FROM XSIA01STAT_OID"), \ WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, \ NULL, \ &pEnumerator);
: ExecQueryF ( -- x ) pEnumerator NULL WBEM_FLAG_FORWARD_ONLY WBEM_FLAG_RETURN_IMMEDIATELY OR S" SELECT * FROM Win32_CurrentTime" >BSTR S" WQL" >BSTR pSvc @ ::ExecQuery ;
: TEST3 0 pLoc ! 0 pSvc ! 0 pEnumerator !
ComInit DUP ." ComInit = " .h CR IF ." Can not ComInit" CR EXIT THEN
SecurInit DUP ." CoInitializeSecurity = " .h CR IF ." Can not CoInitializeSecurity" CR EXIT THEN
CoCreateInstanceF ." CreateInstance = " .h ." pLoc = " pLoc @ .h CR pLoc @ 0= IF ." Can not CreateInstance" CR EXIT THEN
ConnectServerF ." ConnectServer = " .h SPACE ." pSvc = " pSvc @ .h CR pSvc @ 0= IF ." Can not ConnectServer" CR EXIT THEN
CoSetProxyBlanketF DUP ." CoSetProxyBlanket = " .h SPACE ." pSvc = " pSvc @ .h CR IF ." Can not CoSetProxyBlanket" CR EXIT THEN
ExecQueryF ." ExecQueryF = " .h SPACE ." pEnumerator = " pEnumerator @ .h CR pEnumerator @ 0= IF ." Can not ExecQueryF" CR EXIT THEN
;
S" EXMP3.EXE" SAVE BYE
[quote="mOleg"] подозреваю, надо порядо следования параметров реверсировать (или проверить), наиболее вероятная причина. [/quote]
Действительно, был неправильный порядок параметров при вызове ConnectServer.
Спасибо.
Теперь новая беда :)
Ошибка при вызове ExecQueryF (метод ::ExecQuery)
Выдается ошибка 0xC0000005.
Когда на C я объявляю объект [b]pSvc[/b], то я указываю его тип (от кого он унаследован) и при вызове метода ExecQuery ясно к какому классу его относить.
Здесь же я объявил [b]VARIABLE pSvc[/b] и никакой связи, с IID_[b]IWbemServices [/b] нет, поэтому мне не понятно как может быть вызван метод [b]::ExecQuery [/b]
[code] REQUIRE CoInitializeEx ~ac/lib/win/com/com.f
WINAPI: CoInitializeSecurity OLE32.DLL WINAPI: CoSetProxyBlanket OLE32.DLL
\ RPCDCE.H 0 CONSTANT RPC_C_AUTHN_LEVEL_DEFAULT \ Default authentication 3 CONSTANT RPC_C_IMP_LEVEL_IMPERSONATE \ 0 CONSTANT EOAC_NONE \ objidl.h
3 CONSTANT RPC_C_AUTHN_LEVEL_CALL 0 CONSTANT RPC_C_AUTHZ_NONE 10 CONSTANT RPC_C_AUTHN_WINNT
0x20 CONSTANT WBEM_FLAG_FORWARD_ONLY 0x10 CONSTANT WBEM_FLAG_RETURN_IMMEDIATELY
0 CONSTANT NULL
CREATE CLSID_WbemLocator S" {4590F811-1D3A-11D0-891F-00AA004B2E24}" CLSID, 0 , 0 , 0 ,
IID_IUnknown Interface: IID_IWbemLocator {DC12A687-737F-11CF-884D-00AA004B2E24} Method: ::ConnectServer ( a b -- x y ) Interface;
IID_IUnknown Interface: IID_IWbemServices {9556dc99-828c-11cf-a37e-00aa003240c7} Method: ::ExecQuery Interface;
VARIABLE pLoc VARIABLE pSvc VARIABLE pEnumerator
: .h ( x -- ) BASE @ SWAP HEX 8 .0 BASE ! ;
: SecurInit ( -- ior ) NULL EOAC_NONE NULL RPC_C_IMP_LEVEL_IMPERSONATE RPC_C_AUTHN_LEVEL_DEFAULT NULL NULL -1 NULL CoInitializeSecurity ;
\ C from SDK \ hres = CoCreateInstance( \ CLSID_WbemLocator, \ 0, \ CLSCTX_INPROC_SERVER, \ IID_IWbemLocator, (LPVOID *) &pLoc);
: CoCreateInstanceF ( -- x ) pLoc IID_IWbemLocator CLSCTX_INPROC_SERVER 0 CLSID_WbemLocator CoCreateInstance ;
\ C from SDK \ ================================= \ IWbemServices *pSvc = NULL;
\ // Connect to the root\cimv2 namespace with \ // the current user and obtain pointer pSvc \ // to make IWbemServices calls. \ hres = pLoc->ConnectServer( \ _bstr_t(L"ROOT\\WMI"), // Object path of WMI namespace \ NULL, // User name. NULL = current user \ NULL, // User password. NULL = current \ 0, // Locale. NULL indicates current \ NULL, // Security flags. \ 0, // Authority (e.g. Kerberos) \ 0, // Context object \ &pSvc // pointer to IWbemServices proxy \ );
: ConnectServerF ( -- ) pSvc \ &pSvc // pointer to IWbemServices proxy 0 \ 0, // Context object 0 \ 0, // Authority (e.g. Kerberos) NULL \ NULL, // Security flags. 0 \ 0, // Locale. NULL indicates current NULL \ NULL, // User password. NULL = current NULL \ NULL, // User name. NULL = current user S" ROOT\CIMV2" >BSTR \ _bstr_t(L"ROOT\\CIMV2"), // Object path of WMI namespace pLoc @ ::ConnectServer ;
\ C from SDK \ // Step 5: -------------------------------------------------- \ // Set security levels on the proxy ------------------------- \ \ hres = CoSetProxyBlanket( \ pSvc, // Indicates the proxy to set \ RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxx \ RPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxx \ NULL, // Server principal name \ RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxx \ RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx \ NULL, // client identity \ EOAC_NONE // proxy capabilities \ );
: CoSetProxyBlanketF ( -- x ) EOAC_NONE \ EOAC_NONE // proxy capabilities NULL \ NULL, // client identity RPC_C_IMP_LEVEL_IMPERSONATE \ // RPC_C_IMP_LEVEL_xxx RPC_C_AUTHN_LEVEL_CALL \ // RPC_C_AUTHN_LEVEL_xxx NULL \ // Server principal name RPC_C_AUTHZ_NONE \ // RPC_C_AUTHZ_xxx RPC_C_AUTHN_WINNT \ // RPC_C_AUTHN_xxx pSvc @ \ // Indicates the proxy to set CoSetProxyBlanket ;
\ C from SDK \ hres = pSvc->ExecQuery( \ bstr_t("WQL"), \ bstr_t("SELECT * FROM XSIA01STAT_OID"), \ WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, \ NULL, \ &pEnumerator);
: ExecQueryF ( -- x ) pEnumerator NULL WBEM_FLAG_FORWARD_ONLY WBEM_FLAG_RETURN_IMMEDIATELY OR S" SELECT * FROM Win32_CurrentTime" >BSTR S" WQL" >BSTR pSvc @ ::ExecQuery ;
: TEST3 0 pLoc ! 0 pSvc ! 0 pEnumerator !
ComInit DUP ." ComInit = " .h CR IF ." Can not ComInit" CR EXIT THEN
SecurInit DUP ." CoInitializeSecurity = " .h CR IF ." Can not CoInitializeSecurity" CR EXIT THEN
CoCreateInstanceF ." CreateInstance = " .h ." pLoc = " pLoc @ .h CR pLoc @ 0= IF ." Can not CreateInstance" CR EXIT THEN
ConnectServerF ." ConnectServer = " .h SPACE ." pSvc = " pSvc @ .h CR pSvc @ 0= IF ." Can not ConnectServer" CR EXIT THEN
CoSetProxyBlanketF DUP ." CoSetProxyBlanket = " .h SPACE ." pSvc = " pSvc @ .h CR IF ." Can not CoSetProxyBlanket" CR EXIT THEN
ExecQueryF ." ExecQueryF = " .h SPACE ." pEnumerator = " pEnumerator @ .h CR pEnumerator @ 0= IF ." Can not ExecQueryF" CR EXIT THEN
;
S" EXMP3.EXE" SAVE BYE [/code]
|
|
|
|
Добавлено: Вс июн 08, 2008 08:52 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Кстати, у меня похожая ошибка появлялась из-за случайно занесенных копипастом нечитабельных символов (для SPF при редактировании в FAR).
Кстати, у меня похожая ошибка появлялась из-за случайно занесенных копипастом нечитабельных символов (для SPF при редактировании в FAR).
|
|
|
|
Добавлено: Пт июн 06, 2008 15:57 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Avchent писал(а): Подскажите, что я неправильно делаю.
подозреваю, надо порядо следования параметров реверсировать (или проверить), наиболее вероятная причина.
второе, не советую использовать REQUIRE CASE-INS lib/ext/caseins.f - можете запросто ловить косяки в неожиданных местах.
[quote="Avchent"]Подскажите, что я неправильно делаю.[/quote]
подозреваю, надо порядо следования параметров реверсировать (или проверить), наиболее вероятная причина.
второе, не советую использовать REQUIRE CASE-INS lib/ext/caseins.f - можете запросто ловить косяки в неожиданных местах.
|
|
|
|
Добавлено: Пт июн 06, 2008 15:47 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Я посмотрел и вот, что смог написать:
Код: .( Test1...) CR
REQUIRE CASE-INS lib/ext/caseins.f REQUIRE CoInitializeEx ~ac/lib/win/com/com.f
: Q BYE ;
: .h ( x -- ) BASE @ SWAP HEX 8 .0 BASE ! ;
0 CONSTANT NULL
CREATE CLSID_WbemLocator S" {4590F811-1D3A-11D0-891F-00AA004B2E24}" CLSID, 0 , 0 , 0 ,
IID_IUnknown Interface: IID_IWbemLocator {DC12A687-737F-11CF-884D-00AA004B2E24} Method: ::ConnectServer Interface;
\ C from SDK \ hres = CoCreateInstance( \ CLSID_WbemLocator, \ 0, \ CLSCTX_INPROC_SERVER, \ IID_IWbemLocator, (LPVOID *) &pLoc);
VARIABLE pLoc VARIABLE pSvc
: TEST3 0 pLoc ! 0 pSvc !
ComInit ." ComInit = " DUP .h CR 0= IF pLoc IID_IWbemLocator CLSCTX_INPROC_SERVER 0 CLSID_WbemLocator CoCreateInstance ." CreateInstance = " .h ." pLoc = " pLoc @ .h CR ELSE ." Can not ComInit" CR EXIT THEN
pLoc @ 0= IF ." Can not CreateInstance" CR EXIT THEN
S" ROOT\WMI" >BSTR \ , 0 , DUP 20 DUMP CR \ _bstr_t(L"ROOT\\WMI"), // Object path of WMI namespace NULL \ NULL, // User name. NULL = current user NULL \ NULL, // User password. NULL = current 0 \ 0, // Locale. NULL indicates current NULL \ NULL, // Security flags. 0 \ 0, // Authority (e.g. Kerberos) 0 \ 0, // Context object pSvc \ &pSvc // pointer to IWbemServices proxy
pLoc @ ::ConnectServer ." ConnectServer = " .h space .h space ." pSvc = " pSvc @ .h CR ;
\ C from SDK \ ================================= \ IWbemServices *pSvc = NULL;
\ // Connect to the root\cimv2 namespace with \ // the current user and obtain pointer pSvc \ // to make IWbemServices calls. \ hres = pLoc->ConnectServer( \ _bstr_t(L"ROOT\\WMI"), // Object path of WMI namespace \ NULL, // User name. NULL = current user \ NULL, // User password. NULL = current \ 0, // Locale. NULL indicates current \ NULL, // Security flags. \ 0, // Authority (e.g. Kerberos) \ 0, // Context object \ &pSvc // pointer to IWbemServices proxy \ );
S" EXMP2.EXE" SAVE BYE
При попытке вызвать метод ConnectServer выдается ошибка 0x8004100E, что вроде соответствует
"некорректное имя" - надо думать имя ROOT\\WMI.
Подскажите, что я неправильно делаю.
Я посмотрел и вот, что смог написать:
[code] .( Test1...) CR
REQUIRE CASE-INS lib/ext/caseins.f REQUIRE CoInitializeEx ~ac/lib/win/com/com.f
: Q BYE ;
: .h ( x -- ) BASE @ SWAP HEX 8 .0 BASE ! ;
0 CONSTANT NULL
CREATE CLSID_WbemLocator S" {4590F811-1D3A-11D0-891F-00AA004B2E24}" CLSID, 0 , 0 , 0 ,
IID_IUnknown Interface: IID_IWbemLocator {DC12A687-737F-11CF-884D-00AA004B2E24} Method: ::ConnectServer Interface;
\ C from SDK \ hres = CoCreateInstance( \ CLSID_WbemLocator, \ 0, \ CLSCTX_INPROC_SERVER, \ IID_IWbemLocator, (LPVOID *) &pLoc);
VARIABLE pLoc VARIABLE pSvc
: TEST3 0 pLoc ! 0 pSvc !
ComInit ." ComInit = " DUP .h CR 0= IF pLoc IID_IWbemLocator CLSCTX_INPROC_SERVER 0 CLSID_WbemLocator CoCreateInstance ." CreateInstance = " .h ." pLoc = " pLoc @ .h CR ELSE ." Can not ComInit" CR EXIT THEN
pLoc @ 0= IF ." Can not CreateInstance" CR EXIT THEN
S" ROOT\WMI" >BSTR \ , 0 , DUP 20 DUMP CR \ _bstr_t(L"ROOT\\WMI"), // Object path of WMI namespace NULL \ NULL, // User name. NULL = current user NULL \ NULL, // User password. NULL = current 0 \ 0, // Locale. NULL indicates current NULL \ NULL, // Security flags. 0 \ 0, // Authority (e.g. Kerberos) 0 \ 0, // Context object pSvc \ &pSvc // pointer to IWbemServices proxy
pLoc @ ::ConnectServer ." ConnectServer = " .h space .h space ." pSvc = " pSvc @ .h CR ;
\ C from SDK \ ================================= \ IWbemServices *pSvc = NULL;
\ // Connect to the root\cimv2 namespace with \ // the current user and obtain pointer pSvc \ // to make IWbemServices calls. \ hres = pLoc->ConnectServer( \ _bstr_t(L"ROOT\\WMI"), // Object path of WMI namespace \ NULL, // User name. NULL = current user \ NULL, // User password. NULL = current \ 0, // Locale. NULL indicates current \ NULL, // Security flags. \ 0, // Authority (e.g. Kerberos) \ 0, // Context object \ &pSvc // pointer to IWbemServices proxy \ );
S" EXMP2.EXE" SAVE BYE [/code]
При попытке вызвать метод ConnectServer выдается ошибка 0x8004100E, что вроде соответствует
"некорректное имя" - надо думать имя ROOT\\WMI.
Подскажите, что я неправильно делаю.
|
|
|
|
Добавлено: Пт июн 06, 2008 14:53 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Общий совет:
Посмотрите в spf4, как организован интерфейс с COM интерфейсом.
произведя поиск исходников, например, по CLSID
P.S. Возможно этого хватит:)
Общий совет:
Посмотрите в spf4, как организован интерфейс с COM интерфейсом.
произведя поиск исходников, например, по CLSID
P.S. Возможно этого хватит:)
|
|
|
|
Добавлено: Пн июн 02, 2008 11:41 |
|
|
|
|
|
Заголовок сообщения: |
Вызов WMI в SP-Forth |
|
|
Привет всем!
Не подскажете как организовать обращение к сервису WMI ?
Вот фрагмент на C:
Код: IWbemLocator *pLoc = NULL;
hres = CoCreateInstance( CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *) &pLoc);
Как его же реализовать на SP-Forth ? Особенно интересует обращение к методам, а именно: Код: IWbemServices *pSvc = NULL; // Connect to the root\cimv2 namespace with // the current user and obtain pointer pSvc // to make IWbemServices calls. hres = pLoc->ConnectServer( _bstr_t(L"ROOT\\CIMV2"), // Object path of WMI namespace NULL, // User name. NULL = current user NULL, // User password. NULL = current 0, // Locale. NULL indicates current NULL, // Security flags. 0, // Authority (e.g. Kerberos) 0, // Context object &pSvc // pointer to IWbemServices proxy );
Как то же самое сделать на Forth ?
Привет всем!
Не подскажете как организовать обращение к сервису WMI ?
Вот фрагмент на C:
[code] IWbemLocator *pLoc = NULL;
hres = CoCreateInstance( CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID *) &pLoc); [/code]
Как его же реализовать на SP-Forth ?
Особенно интересует обращение к методам, а именно:
[code] IWbemServices *pSvc = NULL; // Connect to the root\cimv2 namespace with // the current user and obtain pointer pSvc // to make IWbemServices calls. hres = pLoc->ConnectServer( _bstr_t(L"ROOT\\CIMV2"), // Object path of WMI namespace NULL, // User name. NULL = current user NULL, // User password. NULL = current 0, // Locale. NULL indicates current NULL, // Security flags. 0, // Authority (e.g. Kerberos) 0, // Context object &pSvc // pointer to IWbemServices proxy ); [/code]
Как то же самое сделать на Forth ?
|
|
|
|
Добавлено: Пн июн 02, 2008 11:02 |
|
|
|
|