hiho
ich möchte mit dotnet boardmitteln asynchrone und synchrone operationen mit verschiedenen devices durchführen da dachte ich mir ich fang mal mit com und lpt an.
so nun hatte ich gestern abend fast alle apis super am laufen. und auch en tollen weg gefunden um einen filestream zu bekommen der mich bytes schreiben und lesen lies vom comm port. ich schlief ruhig ein und als ich heute das projekt wieder startete bekam ich eine exception ich hatte einfach nur die form umgeschrieben an der klasse selbst nichts gemacht ;( und nun sagt mir die getCommFileStream function immer das ich ein ungültiges handle angebe das ist auch bei anderen leuten jetz so und auch andere funktionen die auf einem comm handle beruhen funktionieren nicht mehr.
ich kriege einfach kein handle mehr mit dem gleichen code, die geräte die ich anschliesse funktionieren dennoch astrein.
naja nun viel geredet hier mal ein bisschen code der nur einen filestream vom handle erstellt.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
Try
'Dim Astream As IO.FileStream = getAsyncCommFileStream(1)
Dim stream As IO.FileStream = getCommFileStream(1)
' MsgBox(Astream.Handle.ToString)
MsgBox(stream.Handle.ToString)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
<DllImport("Kernel32.dll")> Private Shared Function CreateFile _
(ByVal filename As String, <MarshalAs(UnmanagedType.U4)> _
ByVal fileaccess As IO.FileAccess, <MarshalAs(UnmanagedType.U4)> _
ByVal fileshare As IO.FileShare, ByVal securityattributes As Integer, _
<MarshalAs(UnmanagedType.U4)> ByVal creationdisposition As IO.FileMode, _
ByVal flags As Integer, ByVal template As IntPtr) As IntPtr
End Function
Private Const FILE_FLAG_OVERLAPPED As Integer = &H40000000
Private Const FILE_FLAG_NO_BUFFERING As Integer = &H20000000
Public Function getCommFileStream(ByVal PortIndex As Integer, Optional _
ByVal access As IO.FileAccess = IO.FileAccess.ReadWrite, Optional ByVal _
share As IO.FileShare = IO.FileShare.ReadWrite) As IO.FileStream
Return New IO.FileStream(CreateFile("\\.\COM" & PortIndex.ToString, _
access, share, 0, IO.FileMode.Create, 0, IntPtr.Zero), _
IO.FileAccess.ReadWrite, True)
End Function
Public Function getAsyncCommFileStream(ByVal PortIndex As Integer, Optional _
ByVal bufsize As Integer = 512, Optional ByVal access As IO.FileAccess = _
IO.FileAccess.ReadWrite, Optional ByVal share As IO.FileShare = _
IO.FileShare.ReadWrite) As IO.FileStream
Return New IO.FileStream(CreateFile("\\.\COM" & PortIndex.ToString, _
access, share, 0, IO.FileMode.Create, FILE_FLAG_OVERLAPPED Or _
FILE_FLAG_NO_BUFFERING, IntPtr.Zero), IO.FileAccess.ReadWrite, True, _
bufsize, True)
End Function ich versteh echt die welt nicht mehr
ahoi |