MMEからMIDIポート名を読み取るとき、名前はANSIコードページを使用してエンコードされたマルチバイト文字列であることに気付きました。これは私のアプリがデフォルトで使用します。DirectMusicドライバーからこれらの名前を受け取る場合、名前はOEMコードページでエンコードされたワイド文字列です。コードページの簡単な復習については、RaymondChenによるこの記事を参照してください。
私のドイツ語システムでは、これは、ANSIコードページであることが判明した現在のコードページを使用すると、MMEから「Audiogerät」を取得し、DirectMusicから「Audiogeröt」を取得することを意味します。後者は間違っています。これは、その姓を代わりにOEMエンコードとして扱うと修正されます。
では、これらの名前をデコードするコードページをどのように知ることができますか?DirectMusicに由来する名前が異なる方法でエンコードされるのはなぜですか?それはUSBドライバーから来ていますか?COMフレームワーク?DirectMusic?MIDIポートの名前を読み取るときに使用するコードページを確実に知るにはどうすればよいですか?
情報:
- 使用するコードページの引数として、およびを使用して変換を実行するためにand関数を使用します
MultiByteToWideChar()
。WideCharToMultiByte()
CP_ACP
CP_OEMCP
midiInGetDeviceCaps()
MMEサブシステムからMIDIポート情報を取得するために使用します...- ...そして(ANSI)コードページ
MIDIINCAPS.szPname
を使用して変換します。CP_ACP
IID_IDirectMusic8::EnumPort()
DirectMusicからポート情報を取得するために使用します...DMUS_PORTCAPS.wszDescription
...そしてコードページを使用して変換しCP_OEMCP
ます。