15,471
社区成员
发帖
与我相关
我的任务
分享
string CMyWMI::QuerySystemInfo()
{
HRESULT hres; //定义COM调用的返回
IEnumWbemClassObject* pEnumerator = NULL;
bool bRet = false;
string result;
try{
hres = pSvc_->ExecQuery(
bstr_t("WQL"),
bstr_t("SELECT * FROM Win32_OperatingSystem"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator);
if (FAILED(hres))
{
throw exception("ExecQuery() error.");
}
while (pEnumerator)
{
IWbemClassObject *pclsObj;
ULONG uReturn = 0;
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,
&pclsObj, &uReturn);
if(0 == uReturn)
{
break;
}
//GetInfo(L"BootDevice",pclsObj);
result=GetInfo(L"Caption",pclsObj);
//GetInfo(L"Manufacturer",pclsObj);
//GetInfo(L"CSName",pclsObj);
//GetInfo(L"WindowsDirectory",pclsObj);
//GetInfo(L"SystemDirectory",pclsObj);
//GetInfo(L"TotalVisibleMemorySize",pclsObj);
//GetInfo(L"FreePhysicalMemory",pclsObj);
pclsObj->Release();
}
}catch(exception& e)
{
cout << e.what() << endl;
if(pEnumerator != NULL)
{
pEnumerator->Release();
pEnumerator = NULL;
}
//return NULL;
}
if(pEnumerator != NULL)
{
pEnumerator->Release();
pEnumerator = NULL;
}
//bRet = true;
return result;
}
string CMyWMI::QueryCPUInfo()
{
string result;
HRESULT hres; //定义COM调用的返回
IEnumWbemClassObject* pEnumerator = NULL;
//bool bRet = false;
try{
hres = pSvc_->ExecQuery(
bstr_t("WQL"),
bstr_t("SELECT * FROM Win32_Processor"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator);
}
提示就是这个指针的问题,但程序未封装成DLL时,是可以运行的,能正确提取,后来创建成W32 DLL的空项目,封装成dll后,通过MFC调用这个dll就出问题了,我感觉可能是两者的兼容问题