掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VB.NET MIDIの出力デバイス名の取得について (ID:86999)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
現在、VB.NETでMIDIのソフトを作成しようとプログラムしているのですが、 MIDI出力デバイスのデバイス名を取得するためAPIのmidiOutGetDevCaps関数を使用して取得しようとしていますが、どうもうまく取得できません。(取得はできるのですが途中で切れます) '取得プログラム 'APIで取得したデバイス名を出力ウィンドウにデバッグ出力する <StructLayout(LayoutKind.Sequential)> Public Structure MIDIOUTCAPS Public wMid As Short Public wPid As Short Public vDriverVersion As Integer <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=MAXPNAMELEN)> Public szPname As String Public wTechnology As Short Public wVoices As Short Public wNotes As Short Public wChannelMask As Short Public dwSupport As Integer End Structure Public Declare Function midiOutGetDevCaps Lib "winmm.dll" Alias "midiOutGetDevCapsA" (ByVal uDeviceID As Integer, <MarshalAs(UnmanagedType.Struct)> ByRef lpCaps As MIDIOUTCAPS, ByVal uSize As Integer) As Integer Public Function GetMidiOutDeviceName() Dim ret As Long Dim Caps As MIDIOUTCAPS Dim i As Integer MIDIDeviceCnt = midiOutGetNumDevs MIDIDeviceCnt = MIDIDeviceCnt - 1 ReDim MidiOutDevices(MIDIDeviceCnt) For i = 0 To ret ret = midiOutGetDevCaps(i, Caps, Len(Caps)) MidiOutDevices(i).Caps = Caps System.Diagnostics.Debug.WriteLine(Caps.szPname) Next End Function このようなプログラムです。 この結果、出力ウィンドウで出力されるデバイス名は(MIDI出力デバイスが1つだけですので) Microsoft GS Wav となり、途中で切れているのです。 本来ならば Microsoft GS Wavetable SW Synth と出てほしいところなのですが・・・・ VB6で同等のプログラムを組み実行するときちんと Microsoft GS Wavetable SW Synth という結果が出るのですが。 マーシャリングというのでしょうか、このやり方がまずいのかどうか 一応、取得されるMIDIOUTCAPS構造体のszPnameメンバをchar型配列にして 見ましたが結果は同じで途中までしか取得できませんでした。 どなたか、解決方法をご存知の方がおられましたら、教えていただきたいと思いBBSに書き込んだしだいです。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.