OSDN Git Service

#34763 64bit対応でMIDI入力が動作しなくなっていた問題を修正。
authoryyagi <yyagi.dtxmania@gmail.com>
Thu, 13 Jun 2019 15:38:10 +0000 (00:38 +0900)
committeryyagi <yyagi.dtxmania@gmail.com>
Thu, 13 Jun 2019 15:38:10 +0000 (00:38 +0900)
(せなさんのDTXMania ALの修正コメントがヒントになりました。ありがとうございます。)

FDK/コード/00.共通/CWin32.cs
FDK/コード/02.入力/CInputMIDI.cs
FDK/コード/02.入力/CInput管理.cs
MidiInChecker2_Solution/MidiInChecker2_Project/PsuedoFDK/CInputManager.cs
MidiInChecker2_Solution/MidiInChecker2_Project/PsuedoFDK/CInputMidi.cs
MidiInChecker2_Solution/MidiInChecker2_Project/PsuedoFDK/CWin32.cs
RuntimeResources/MidiInChecker2.exe [new file with mode: 0644]

index 240f2c9..d6aa311 100644 (file)
@@ -343,21 +343,21 @@ namespace FDK
                [DllImport( "user32.dll", CharSet = CharSet.Auto )]
                public static extern bool IsZoomed( IntPtr hWnd );
                [DllImport( "winmm.dll" )]
-               public static extern uint midiInClose( uint hMidiIn );
+               public static extern uint midiInClose( IntPtr hMidiIn );
                [DllImport( "winmm.dll" )]
                public static extern uint midiInGetDevCaps( uint uDeviceID, ref MIDIINCAPS lpMidiInCaps, uint cbMidiInCaps );
                [DllImport( "winmm.dll" )]
-               public static extern uint midiInGetID( uint hMidiIn, ref uint puDeviceID );
+               public static extern uint midiInGetID( IntPtr hMidiIn, ref IntPtr puDeviceID );
                [DllImport( "winmm.dll" )]
                public static extern uint midiInGetNumDevs();
                [DllImport( "winmm.dll" )]
-               public static extern uint midiInOpen( ref uint phMidiIn, uint uDeviceID, MidiInProc dwCallback, int dwInstance, int fdwOpen );
+               public static extern uint midiInOpen( ref IntPtr phMidiIn, uint uDeviceID, MidiInProc dwCallback, IntPtr dwInstance, int fdwOpen );
                [DllImport( "winmm.dll" )]
-               public static extern uint midiInReset( uint hMidiIn );
+               public static extern uint midiInReset( IntPtr hMidiIn );
                [DllImport( "winmm.dll" )]
-               public static extern uint midiInStart( uint hMidiIn );
+               public static extern uint midiInStart( IntPtr hMidiIn );
                [DllImport( "winmm.dll" )]
-               public static extern uint midiInStop( uint hMidiIn );
+               public static extern uint midiInStop( IntPtr hMidiIn );
                [DllImport( "user32.dll", CharSet = CharSet.Auto )]
                public static extern IntPtr MonitorFromWindow( IntPtr hwnd, uint dwFlags );
                [return: MarshalAs( UnmanagedType.Bool )]
@@ -808,6 +808,6 @@ namespace FDK
 
                // Win32 メッセージ処理デリゲート
 
-               public delegate void MidiInProc( uint hMidiIn, uint wMsg, int dwInstance, int dwParam1, int dwParam2 );
+               public delegate void MidiInProc( IntPtr hMidiIn, uint wMsg, int dwInstance, int dwParam1, int dwParam2 );
        }
 }
index ebb6346..28c5d29 100644 (file)
@@ -9,14 +9,14 @@ namespace FDK
        {
                // プロパティ
 
-               public uint hMidiIn;
+               public IntPtr hMidiIn;
                public List<STInputEvent> listEventBuffer;
 
                // コンストラクタ
 
                public CInputMIDI( uint nID )
                {
-                       this.hMidiIn = 0;
+                       this.hMidiIn = IntPtr.Zero;
                        this.listEventBuffer = new List<STInputEvent>( 32 );
                        this.list入力イベント = new List<STInputEvent>( 32 );
                        this.e入力デバイス種別 = E入力デバイス種別.MidiIn;
index 87ad390..dc7dca1 100644 (file)
@@ -62,11 +62,7 @@ namespace FDK
 
 
                // コンストラクタ
-               public CInput管理( IntPtr hWnd )
-               {
-                       CInput管理初期化( hWnd, true );
-               }
-               public CInput管理( IntPtr hWnd, bool bUseMidiIn )
+               public CInput管理( IntPtr hWnd, bool bUseMidiIn = true )
                {
                        CInput管理初期化( hWnd, bUseMidiIn );
                }
@@ -117,7 +113,7 @@ namespace FDK
                                        {
                                                Trace.TraceError( "MIDI In: Device{0}: midiInDevCaps(): {1:X2}: ", i, num3 );
                                        }
-                                       else if ( ( CWin32.midiInOpen( ref item.hMidiIn, i, this.proc, 0, 0x30000 ) == 0 ) && ( item.hMidiIn != 0 ) )
+                                       else if ( ( CWin32.midiInOpen( ref item.hMidiIn, i, this.proc, IntPtr.Zero, 0x30000 ) == 0 ) && ( item.hMidiIn != IntPtr.Zero ) )
                                        {
                                                CWin32.midiInStart( item.hMidiIn );
                                                Trace.TraceInformation( "MIDI In: [{0}] \"{1}\" の入力受付を開始しました。", i, lpMidiInCaps.szPname );
@@ -267,7 +263,7 @@ namespace FDK
                private CWin32.MidiInProc proc;
 //             private CTimer timer;
 
-               private void MidiInCallback( uint hMidiIn, uint wMsg, int dwInstance, int dwParam1, int dwParam2 )
+               private void MidiInCallback( IntPtr hMidiIn, uint wMsg, int dwInstance, int dwParam1, int dwParam2 )
                {
                        int p = dwParam1 & 0xF0;
                        if( wMsg != CWin32.MIM_DATA || ( p != 0x80 && p != 0x90 && p != 0xB0 ) )
index 5f7e2e3..7e0b632 100644 (file)
@@ -45,7 +45,7 @@ namespace MidiInChecker2
                                {\r
                                        Trace.TraceError( "MIDI In: Device{0}: midiInDevCaps(): {1:X2}: ", i, retcode );\r
                                }\r
-                               else if ( ( CWin32.midiInOpen( ref item.hMidiIn, i, this.proc, 0, 0x30000 ) == 0 ) && ( item.hMidiIn != 0 ) )\r
+                               else if ( ( CWin32.midiInOpen( ref item.hMidiIn, i, this.proc, IntPtr.Zero, 0x30000 ) == 0 ) && ( item.hMidiIn != IntPtr.Zero ) )\r
                                {\r
                                        CWin32.midiInStart( item.hMidiIn );\r
                                        Trace.TraceInformation( "MIDI In: [{0}] \"{1}\" の入力受付を開始しました。", i, lpMidiInCaps.szPname );\r
@@ -154,7 +154,7 @@ namespace MidiInChecker2
                private object objMidiIn排他用 = new object();\r
                private CWin32.MidiInProc proc;\r
 \r
-               private void MidiInCallback( uint hMidiIn, uint wMsg, int dwInstance, int dwParam1, int dwParam2 )\r
+               private void MidiInCallback( IntPtr hMidiIn, uint wMsg, int dwInstance, int dwParam1, int dwParam2 )\r
                {\r
                        int p = dwParam1 & 0xF0;\r
                        if ( wMsg != CWin32.MIM_DATA )  // || ( p != 0x80 && p != 0x90 && p != 0xB0 ) )\r
index 63bdc77..b5810a0 100644 (file)
@@ -9,7 +9,7 @@ namespace MidiInChecker2
        {\r
                // プロパティ\r
 \r
-               public uint hMidiIn;\r
+               public IntPtr hMidiIn;\r
                public List<STInputEvent> listEventBuffer;\r
 \r
 \r
@@ -17,7 +17,7 @@ namespace MidiInChecker2
 \r
                public CInputMIDI( uint nID )\r
                {\r
-                       this.hMidiIn = 0;\r
+                       this.hMidiIn = IntPtr.Zero;\r
                        this.listEventBuffer = new List<STInputEvent>( 32 );\r
                        this.list入力イベント = new List<STInputEvent>( 32 );\r
                        this.e入力デバイス種別 = E入力デバイス種別.MidiIn;\r
index db3d583..50f0177 100644 (file)
@@ -186,21 +186,21 @@ namespace MidiInChecker2
                [DllImport( "user32.dll", CharSet = CharSet.Auto )]\r
                public static extern bool IsZoomed( IntPtr hWnd );\r
                [DllImport( "winmm.dll" )]\r
-               public static extern uint midiInClose( uint hMidiIn );\r
+               public static extern uint midiInClose( IntPtr hMidiIn );\r
                [DllImport( "winmm.dll" )]\r
                public static extern uint midiInGetDevCaps( uint uDeviceID, ref MIDIINCAPS lpMidiInCaps, uint cbMidiInCaps );\r
                [DllImport( "winmm.dll" )]\r
-               public static extern uint midiInGetID( uint hMidiIn, ref uint puDeviceID );\r
+               public static extern uint midiInGetID( IntPtr hMidiIn, ref IntPtr puDeviceID );\r
                [DllImport( "winmm.dll" )]\r
                public static extern uint midiInGetNumDevs();\r
                [DllImport( "winmm.dll" )]\r
-               public static extern uint midiInOpen( ref uint phMidiIn, uint uDeviceID, MidiInProc dwCallback, int dwInstance, int fdwOpen );\r
+               public static extern uint midiInOpen( ref IntPtr phMidiIn, uint uDeviceID, MidiInProc dwCallback, IntPtr dwInstance, int fdwOpen );\r
                [DllImport( "winmm.dll" )]\r
-               public static extern uint midiInReset( uint hMidiIn );\r
+               public static extern uint midiInReset( IntPtr hMidiIn );\r
                [DllImport( "winmm.dll" )]\r
-               public static extern uint midiInStart( uint hMidiIn );\r
+               public static extern uint midiInStart( IntPtr hMidiIn );\r
                [DllImport( "winmm.dll" )]\r
-               public static extern uint midiInStop( uint hMidiIn );\r
+               public static extern uint midiInStop( IntPtr hMidiIn );\r
                [DllImport( "user32.dll", CharSet = CharSet.Auto )]\r
                public static extern IntPtr MonitorFromWindow( IntPtr hwnd, uint dwFlags );\r
                [return: MarshalAs( UnmanagedType.Bool )]\r
@@ -496,6 +496,6 @@ namespace MidiInChecker2
 \r
                // Win32 メッセージ処理デリゲート\r
 \r
-               public delegate void MidiInProc( uint hMidiIn, uint wMsg, int dwInstance, int dwParam1, int dwParam2 );\r
+               public delegate void MidiInProc( IntPtr hMidiIn, uint wMsg, int dwInstance, int dwParam1, int dwParam2 );\r
        }\r
 }\r
diff --git a/RuntimeResources/MidiInChecker2.exe b/RuntimeResources/MidiInChecker2.exe
new file mode 100644 (file)
index 0000000..bb90c18
Binary files /dev/null and b/RuntimeResources/MidiInChecker2.exe differ