Не создается указатель для обращения к функции
Раньше работал с ней таким способом:
IEnumWbemClassObject* pEnumerator = NULL;
hRes = pService->ExecQuery((BSTR)"WQL",
(BSTR)"SELECT * FROM Win32_Processor",
WBEM_FLAG_FORWARD_ONLY,
NULL,
&pEnumerator)
Теперь необходимо вызвать примерно так:
VOID(WINAPI* TrueSleep)(DWORD dwMilliseconds) = Sleep; //пример для функции Sleep()
Я делаю так, но получаю ошибку
VOID(WINAPI* ExecQuery)(BSTR argument) = Sleep;
Ответы (1 шт):
Автор решения: mik.ov
→ Ссылка
- Стиль си:
#define EXEC_QUERY_ID 20
typedef HRESULT(__stdcall *PFN_WbemServicesExecQuery)(IWbemServices * This,
const BSTR strQueryLanguage,
const BSTR strQuery,
long lFlags,
IWbemContext *pCtx,
IEnumWbemClassObject **ppEnum);
IWbemServices * pWbemServices;
PFN_WbemServicesExecQuery *vtbl_ptr =
(PFN_WbemServicesExecQuery*) *((char**) pWbemServices);
PFN_WbemServicesExecQuery pfn_ptr = vtbl_ptr[EXEC_QUERY_ID];
// call
pfn_ptr(pWbemServices, ...);
- Стиль c++:
typedef HRESULT(__stdcall IWbemServices::*PFN_ExecQuery)(const BSTR strQueryLanguage,
const BSTR strQuery,
long lFlags,
IWbemContext *pCtx,
IEnumWbemClassObject **ppEnum);
PFN_ExecQuery pQuery = &IWbemServices::ExecQuery;
// call
(pWbemServices->*pQuery)(...);