我正在编写一个用于我的基于.NET的WinRT应用程序的C++ WinRT组件DLL。该DLL定义了一个SoundSample ref类,通过调用IXAudio2::CreateSourceVoice创建一个XAudio语音。CreateSourceVoice需要一个“IXAudio2VoiceCallback *pCallback”参数以在各种音频事件上启用回调。现在,我正在尝试基于this article实现该回调。XAudio将会回调到我定义的SoundCallback类的方法中:
#pragma once
#include "xaudio2.h"
#include "pch.h"
class SoundCallback
: public IXAudio2VoiceCallback
{
private:
//SoundSample^ sample; //does not compile
public:
SoundCallback(void);
~SoundCallback(void);
//Called when the voice has just finished playing a contiguous audio stream.
void OnStreamEnd();
void OnVoiceProcessingPassEnd();
void OnVoiceProcessingPassStart(UINT32 SamplesRequired);
void OnBufferEnd(void * pBufferContext);
void OnBufferStart(void * pBufferContext);
void OnLoopEnd(void * pBufferContext);
void OnVoiceError(void * pBufferContext, HRESULT Error);
};
在我尝试从我的本地回调类的实例中回调到父级SoundSample对象时,一切都很好。我想我可以将SoundSample类的实例传递给SoundCallback对象,但似乎它不允许我在本地类中声明ref类字段:
SoundCallback.h(9): error C2143: syntax error : missing ';' before '^'
SoundCallback.h(9): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
SoundCallback.h(9): error C3699: '^' : cannot use this indirection on type 'int'
我回顾了在本地C++中实现回调的方法,但是目前还没有找到合理的解决方案。什么是最好/最简单的方法来做到这一点?