【问题标题】:Bad counter path, pdhAddCounter; performance monitor in windows计数器路径错误,pdhAddCounter; windows下的性能监视器
【发布时间】:2012-05-22 16:34:53
【问题描述】:

我正在尝试使用 pdh.h 计算 windows 2008 服务器上的进程数。

    CONST PWSTR COUNTER_PATH = L"\\System\\Processes";
    HQUERY hQuery = NULL;
    HCOUNTER hCounter;
    PDH_STATUS pdhStatus = ERROR_SUCCESS;

    pdhStatus = PdhOpenQuery(NULL, 0, &hQuery);
    pdhStatus = PdhAddCounter(hQuery, (LPCSTR)COUNTER_PATH, 0, &hCounter);

我从here 获得了 COUNTER_PATH 名称,示例可以在here 中找到。但不知何故,我在 PdhAddCounter 收到了0xC0000BC0 (PDH_CSTATUS_BAD_COUNTERNAME) 错误消息。任何人都可以接受我犯的任何错误吗?我不确定我在这里缺少什么。 COUNTER_PATH 有什么问题吗?

【问题讨论】:

    标签: c++ windows performancecounter


    【解决方案1】:

    您将COUNTER_PATH 转换为PdhAddCounter 中的LPCSTR,这是您不应该做的。

    PdhAddCounter 的第二个参数是LPCTSTR,与CONST PWSTR 相同。

    【讨论】:

    • 当我投射到 LPCTSTR 时,它仍然产生了同样的问题。当我完全删除它时,编译器抱怨“无法将参数 2 从 'const PWSTR' 转换为 'LPCSTR'”。在我在帖子中给出的示例中,它们根本没有转换任何东西。您认为问题与此有关吗?
    • 听起来你没有启用unicode。如果您打开 unicode (Project Properties->Configuration Properties->General->Character Set) 并移除演员表,它应该可以工作。如果您想禁用 unicode,仍然删除演员表,但将您的第一行更改为 LPCSTR COUNTER_PATH = "\\System\\Processes";
    猜你喜欢
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    相关资源
    最近更新 更多