0

WinUSBのさらなる機能のハンドルを取得するには、一部のVB.NETプロジェクトでkernel32.dllからインポートされたCreateFileを使用する必要があります。

問題は、ハンドルが不要になったときに、CreateFileの後で何とか/何かを破棄する必要があるかどうかです。

2番目の質問は、WinUsb_Initialize()をCreateFileで返されたハンドルとともに使用して、WinUSBの目的で別のハンドルを取得することです。私も掃除をする必要がありますか?

前もって感謝します、


   <DllImport("kernel32.dll",
            SetLastError:=True,
            CharSet:=CharSet.Auto)> _
    Private Shared Function CreateFile(ByVal lpFileName As String,
                                       ByVal dwDesiredAccess As Int32,
                                       ByVal dwShareMode As UInt32,
                                       ByVal lpSecurityAttributes As IntPtr,
                                       ByVal dwCreationDisposition As UInt32,
                                       ByVal dwFlagsAndAttributes As UInt32,
                                       ByVal hTemplateFile As IntPtr) As SafeFileHandle
    End Function

    <DllImport("kernel32.dll",
        CharSet:=CharSet.Auto,
        SetLasterror:=True)>
    Public Shared Function CloseHandle(ByVal Handle As Integer) As <MarshalAs(UnmanagedType.Bool)> Boolean
    End Function

CreateFileでセーフハンドラーを使用する場合は、CloseHandleを実行する必要はありません。これは私の「切断」コードです

Dim ErrorStatus As Integer = 0

If hWinUSBInterface <> INVALID_HANDLE_VALUE Then
    WinUsb_Free(hWinUSBInterface)
    hWinUSBInterface = INVALID_HANDLE_VALUE
End If

If hDevice <> INVALID_HANDLE_VALUE Then

    'hDevice = INVALID_HANDLE_VALUE
    'RaiseEvent Error(ErrorStatus, "Disconnect")

    If CloseHandle(hDevice) Then
        hDevice = INVALID_HANDLE_VALUE
        RaiseEvent Disconnected()
    Else
        ErrorStatus = Err.LastDllError
        RaiseEvent Error(ErrorStatus, "Disconnect")
    End If

End If
4

1 に答える 1

1

HANDLEから取得したものはCreateFile()、ピンボーキングによって解放する必要がありますCloseHandle()

WINUSB_INTERFACE_HANDLEから取得したものはWinUSB_Initialize()、ピンボーキングによって解放する必要がありますWinUSB_Free()

これらの要件は、これらの関数のMSDNライブラリの記事で詳しく説明されていることに注意してください。

于 2012-12-21T18:52:13.473 に答える