※ ChatGPTを利用し、要約された質問です(原文:XAudio2がNULLになってしまう)
XAudio2がNULLになってしまう
このQ&Aのポイント
DontacosM2と申します。現在、DirectXを使用してゲームアプリケーションの制作を行っています。友人に渡した実行ファイルでXAudio2がNULLになり、サウンドが鳴らない不具合が発生しています。
XAudio2の初期化部分のソースコードを提供しており、自分のPCでは正常に動作するため、初期化部分に問題はないと考えています。
構築環境として、DirectX SDKはAugust2009、Visual C++ 2008 Expressを使用しており、友人のPCにはSDKは入っておらず、最新のランタイムを利用しています。環境によってXAudio2Createが正常に動作しない可能性があるのでしょうか?
はじめまして、DontacosM2と申します。
現在、DirectX を使用して ゲームアプリケーションの制作を行っています。
サウンド再生に XAudio2 を使用しているのですが、
実行ファイルを作成し、友人に渡したところサウンド部分が原因でアプリケーションが停止してしまい困っております。
以下、XAudio2 の初期化部分のソースコードです。
{
HRESULT hr;
unsigned int flag = 0;
//COMを初期化
CoInitializeEx(NULL, COINIT_MULTITHREADED);
#ifdef _DEBUG
// デバッグする時はフラグを立てるようにとの事
flag |= XAUDIO2_DEBUG_ENGINE;
#endif
hr = XAudio2Create(&g_pXaudio2, flag, XAUDIO2_DEFAULT_PROCESSOR);
if (SUCCEEDED(hr))
{
hr = g_pXaudio2->CreateMasteringVoice(&g_pMasteringVO, 0, 0, 0, 0, 0);
if(FAILED(hr))
{
//エラー処理
}
}
else
{
//エラー処理
}
return hr;
}
自分のPCでコンパイルすると正常にクリエイトでき、サウンドも再生されるのですが、
友人のPCで、僕の作成したexeを実行すると XAudio2Create を行っているところで g_pXaudio2 がNULLになっているようで
以降、サウンドが鳴らない等の不具合が出ています。
DirectX SDK は August2009で、
Visual C++ 2008 Express を使用しています。
友人のPCにはSDKは入っておらず、ランタイムは今現在の最新のものです。
初期化部分に問題は無いと思うのですが・・・
環境によって XAudio2Create が上手く動作しないという事があるのでしょうか?
宜しくお願いします。
お礼
Alyssa_Art さん、ご回答ありがとうございます。 ご指摘通り HRESULT の値を確認したところ直接的な原因では無いものの 糸口となるエラーが確認できました。 吐き出されているエラーは 「アクティブ化コンテキストがアクティブでない」 という内容で、情報を探したところ Visual C++ 2008 Express のランタイムライブラリの設定に問題があるのでは? という部分にたどり着きました。 プロジェクトのプロパティ → 構成プロパティ → C/C++ → コード生成 上記項目のランタイムライブラリを「マルチスレッド(/MT)」に変更 この状態で、Releaseコンパイルを行い作成した.exeを友人PCで実行したところ エラー無く起動し、サウンドの再生が行われました。 Express Edition 2005等では、ランタイムライブラリが「マルチスレッドデバッグDLL」や 「マルチスレッドDLL」となっていると配布先で上手く起動できないという問題があったようで 2008 でもこれに近いものがあるようです。 当初の「サウンドが鳴らない」に関しては解決しましたが、根本解決としていいかどうか、もう少し調べてみようと思います。 解決の糸口を提示して頂き、ありがとうございました(^-^)