使用Windows核心音频API时出现的问题

使用Windows核心音频API时出现的问题,windows,core-audio,Windows,Core Audio,我一直在尝试让一个使用Windows音频API的程序工作。 最终结果将是一个程序,用于检查其他音频处理中的音量变化。 我看过微软网站上的一些例子,对我应该做什么有了一个了解。 然而,当我试图实现这一点时,我得到了一些错误。我首先尝试得到一个列表,实际上是一分钟内所有正在运行的音频进程的计数。 我使用的代码基于Windows站点上的代码,但是我在尝试构建它时会出错。主要有两个方面: “IAudioSessionManager2”:没有与此对象关联的GUID 使用未定义的类型“IAudioSessi

我一直在尝试让一个使用Windows音频API的程序工作。 最终结果将是一个程序,用于检查其他音频处理中的音量变化。 我看过微软网站上的一些例子,对我应该做什么有了一个了解。 然而,当我试图实现这一点时,我得到了一些错误。我首先尝试得到一个列表,实际上是一分钟内所有正在运行的音频进程的计数。 我使用的代码基于Windows站点上的代码,但是我在尝试构建它时会出错。主要有两个方面:

“IAudioSessionManager2”:没有与此对象关联的GUID 使用未定义的类型“IAudioSessionManager2” 第二个也有类似的,但与IAudioSessionEnumerator有关

<>我对C++编程很陌生,更习惯于java,所以我认为这是一个愚蠢的小错误,用头文件或东西,我已经包括了.h代码和.cpp代码如下。 如果有人能帮助我,我将不胜感激

GetProcess.h

#ifndef GETPROCESS_H
#define GETPROCESS_H
#define SAFE_RELEASE(p) { if ( (p) ) { (p)->Release(); (p) = 0; } }

#include<Audiopolicy.h>
#include<Mmdeviceapi.h>
#include <stdio.h>
#include <iostream>

using namespace std; 
struct IAudioSessionManager2;
struct IAudioSessionEnumerator;
struct IAudioSessionControl;
struct IMMDevice;
struct IMMDeviceEnumerator;

ref class GetProcess
{
public:
    GetProcess();
};
#endif
GetProcess.cpp

#include "StdAfx.h"
#include "GetProcess.h"
#include<Audiopolicy.h>
#include<Mmdeviceapi.h>
#include <stdio.h>
#include <iostream>
#include <windows.h>


GetProcess::GetProcess()
{
    IMMDeviceEnumerator* deviceEnumerator = NULL;
    IMMDevice* device = NULL;
    IAudioSessionManager2* sessionManager = NULL;
    IAudioSessionEnumerator* sessionEnumerator = NULL;
    IAudioSessionControl* session = NULL;


    int numberOfProcesses = 0;
    int numberOfActiveProcesses = 0;

    AudioSessionState state;

    //create device enumerator
    CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&deviceEnumerator);
    // get default device
    deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &device);

    // activate session manager
    device->Activate(__uuidof(IAudioSessionManager2), CLSCTX_ALL, NULL, (void**)&sessionManager);
    //// make enum
    sessionManager->GetSessionEnumerator(&sessionEnumerator);
    sessionEnumerator ->GetCount(&numberOfProcesses);
    for (int i = 0; i < numberOfProcesses; i++)
    {
        sessionEnumerator->GetSession(i, &session);
        session->GetState(&state);
        if (state == 1)
        {
            numberOfActiveProcesses++;
        }
        SAFE_RELEASE(session);
    }

    //CLEANUP

    SAFE_RELEASE(deviceEnumerator);
    SAFE_RELEASE(device);
    SAFE_RELEASE(sessionEnumerator);
    SAFE_RELEASE(sessionManager);
}

你有6.0版。您需要下载并安装。IAudioSessionManager2仅在Windows 7上可用。

您使用的是什么版本的Windows SDK?如果您不知道,请提及Visual Studio版本。我不能100%确定我使用的是哪个版本的SDK,但我使用的是Visual Studio 2008 3.5版,这就解决了问题。我知道我做错了什么傻事。