PdhAddCounter的使用问题

coolmei25 2008-10-27 07:01:18
我现在的语句是:
string str = "\\Processor(QQ)\\% Processor Time";
pdhStatus = PdhAddCounter ( hQuery ,
(LPWSTR)str.c_str(),
0 ,
pCounterHandle ) ;
返回的错误代码是:0xc0000bc0,含义是:PDH_CSTATUS_BAD_COUNTERNAME

如果把参数二改成:
const wchar_t str1[] = _TEXT ("\\Process(QQ)\\%Processor Time");
调用PdhAddCounter (...), 返回的错误是0xc0000bb9,含义是PDH_CSTATUS_NO_COUNTER

请问大家,我的这个地方应该怎么写才对,不胜感激
...全文
848 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuncong8 2009-09-01
  • 打赏
  • 举报
回复
计数器名称
\\Process(QQ)\\%% Processor Time
coolmei25 2008-10-28
  • 打赏
  • 举报
回复
自己顶顶,在线等!请大家帮忙呀!!不胜感激
coolmei25 2008-10-28
  • 打赏
  • 举报
回复
前面的代码如下:
#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
#include <pdh.h>
#include <tchar.h>
#include <pdhmsg.h>
#pragma comment ( lib , "Pdh.lib" )

......

HQUERY hQuery;
HCOUNTER *pCounterHandle;
PDH_STATUS pdhStatus;
PDH_FMT_COUNTERVALUE fmtValue;
DWORD ctrType;
CHAR szPathBuffer[1024] = {'\0'};
int nRetCode = 0;

// Open the query object.
pdhStatus = PdhOpenQuery (0, 0, &hQuery);

if ( pdhStatus != ERROR_SUCCESS )
{
return -1;
}

pCounterHandle = (HCOUNTER *)GlobalAlloc(GPTR, sizeof(HCOUNTER));

if ( pCounterHandle == NULL )
{
return -1;
}

const wchar_t str1[] = L"\\Process(QQ)\\%Processor Time";

pdhStatus = PdhAddCounter ( hQuery ,
str1,
0 ,
pCounterHandle ) ;

if (pdhStatus != ERROR_SUCCESS)
{
return -1;
}
........
coolmei25 2008-10-28
  • 打赏
  • 举报
回复
按楼上提示,将语句改成了:
const wchar_t str1[] = L"\\Process(QQ)\\%Processor Time";
pdhStatus = PdhAddCounter ( hQuery ,
str1,
0 ,
pCounterHandle ) ;
结果依然是:0xc0000bb9:PDH_CSTATUS_NO_COUNTER

str1在内存中形式如下:
5c 00 50 00 72 00 6f 00 63 00 65 00 73 00 73 00 28 00 51 00 51 00 29 \.P.r.o.c.e.s.s.(.Q.Q.)
0x0012F797 00 5c 00 25 00 50 00 72 00 6f 00 63 00 65 00 73 00 73 00 6f 00 72 00 .\.%.P.r.o.c.e.s.s.o.r.
0x0012F7AE 20 00 54 00 69 00 6d 00 65 00 00 00 cc cc cc cc cc cc cc cc cc cc 00 .T.i.m.e

所以肯定是宽字符形式的,请大家帮忙分析一下,为什么会没有添加上计数器呢?
baihacker 2008-10-27
  • 打赏
  • 举报
回复



下面的明显错了,用的是多字符字符串,然后类型强转为宽字符,不对
string str = "\\Processor(QQ)\\% Processor Time";
pdhStatus = PdhAddCounter ( hQuery ,
(LPWSTR)str.c_str(),
0 ,
pCounterHandle ) ;


在指明了用宽字符的情况下,尝试使用兼容字符不对,应该直接指定用宽字符如下
const wchar_t str1[] = L"\\Process(QQ)\\%Processor Time";

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧