掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
シリアル通信で受信するには? (ID:113152)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
GotDotNetのサンプルの方ではデータがない状態で受信ボタンを押しても、lpNumberOfBytesReadには0が入って返ってきてました。そのため、ちょっと変更してDo〜LoopでlpNumberOfBytesReadをみてループを抜けて次の処理、ということができました。 <DllImport("kernel32.dll")> Private Shared Function CreateFile(<MarshalAs(UnmanagedType.LPStr)> ByVal lpFileName As String, ByVal dwDesiredAccess As Integer, ByVal dwShareMode As Integer, ByVal lpSecurityAttributes As Integer, ByVal dwCreationDisposition As Integer, ByVal dwFlagsAndAttributes As Integer, ByVal hTemplateFile As Integer) As Integer End Function <DllImport("kernel32.dll")> Private Shared Function ReadFile(ByVal hFile As Integer, ByVal Buffer As Byte(), ByVal nNumberOfBytesToRead As Integer, ByRef lpNumberOfBytesRead As Integer, ByRef lpOverlapped As OVERLAPPED) As Integer End Function <StructLayout(LayoutKind.Sequential, Pack:=1)> Public Structure OVERLAPPED Public Internal As Int32 Public InternalHigh As Int32 Public Offset As Int32 Public OffsetHigh As Int32 Public hEvent As Int32 End Structure これがそのCreateFile、ReadFile、OVERLAPPED構造体です。 とりあえずまねしてOVERLAPPED構造体をつくったのですが、「StructLayoutが定義されてません」といわれてしまい、よく分からなかったので、<StructLayout(LayoutKind.Sequential, Pack:=1)> をはずして作りました。 hSerialPort = CreateFile("COM3", GENERIC_READ Or GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, IntPtr.Zero) のFILE_ATTRIBUTE_NORMALの部分はGotDotNetでは変数の中が0になっていたので直接0に置き換えてあります。 自分で気付いた相違点はこのくらいだったので実行してみましたが、やはりReadFileのところで返ってきませんでした。 非常に分かりづらいとは思いますが何か気づいたことがありましたらよろしくお願いします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.