記事No |
: 252 |
投稿日 |
: 2024/02/18(Sun) 01:45:06 |
投稿者 |
: You |
kbGuru2SMF.kpi → kbdmusic.kpi の切り替え後に再生できない現象は、KbDMusicPlayer::Open() の
CoCreateInstance(CLSID_DirectMusicLoader, NULL, CLSCTX_INPROC, IID_IDirectMusicLoader8, (void **)&m_pDML);
がエラー「0x800401F0 : CoInitialize は呼び出されていません。」になるため発生します。
CoInitializeEx と CoUninitialize の呼び出しを追加したのは、このエラーに対応するためです。
数種類のkpiファイルを用意し、64bit版の本体で切り替えて再生できるかの確認をしました。
A : オリジナルの kbdmusic.kpi
A': A のコピー
B : CoInitializeEx と CoUninitialize の呼び出しを追加した kbdmusic.kpi
B': B のコピー
C : kbGuru2SMF.kpi
C': C のコピー
・切り替えのパターン(9種)
[A → A'][A → B][A → C]
[B → A][B → B'][B → C]
[C → A][C → B][C → C']
・結果
OK: [A → A'][A → B][A → C] [B → B'][B → C] [C → B][C → C']
NG: [B → A] [C → A]
kbGuru2SMF.kpi からの切り替え時に限らず kbdmusic.kpi で再生できない現象が発生しました。
初回の kbdmusic.kpi での再生は成功することから、kbrunkpi.exe での
CoInitializeEx と CoUninitialize の呼び出しのタイミングや対称性が影響するのかも?
と予想しますが、これ以上は調査が難しいです。
kbGuru2SMF.kpi 固有の現象ではなさそうですので、記事No[242]の物を修正せず確定版としておきます。
記事編集