.NETベースのWinRTアプリケーションで使用するためのC++ WinRTコンポーネントDLLを作成しています。 DLLは、IXAudio2::CreateSourceVoiceを呼び出してXAudio音声を生成するSoundSample refクラスを定義します。 CreateSourceVoiceは "IXAudio2VoiceCallback * pCallback"パラメータを取り、さまざまなオーディオイベントのコールバックを有効にします。今私はthis articleに基づいてそのコールバックを実装しようとしています。 XAudioは、おそらく同じように定義された私のSoundCallbackクラスのメソッドにコールバックします:私は親SoundSampleオブジェクトに私のネイティブのコールバッククラスのインスタンスからコールバックする方法を見つけ出すことを試みるまでネイティブC++クラスのインスタンスからC++/CX refクラスにコールバックを取得する最善の方法は何ですか?
#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);
};
すべてが正常です。私はSoundCallbackオブジェクトにSoundSampleクラスのインスタンスを渡すことができ考えていたが、それは私がネイティブクラスの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 + +と私はこれまでの合理的な解決策を見つけることができませんでした。これを行う最も簡単な方法は何ですか?
ところで、あなたはそれを解決する方法を知っていれば - 役立つだろう。私はC++ではむしろ錆びています。唯一のことは、refクラスのインスタンスをスレッド・スピンアップしてスレッド・スレッドで実行し、ネイティブ・クラスからのスレッド・イベントを待つことです。SetEvent、ResetEventなど、WaitForSingleObjectなど –
これはC++ 11でタグ付けされているのはなぜですか? – Ivan
私はC++ 11についてよく分かりませんが、これはWindows 8 C++/CXとネイティブC++の混在の問題であると思います.C++ 11の側面があるかもしれません... –