プロが教えるわが家の防犯対策術!

Win32APIとVB.NETを使ってシリアル通信をするプログラミングを考えています。概要はGPS端末からのデータをVBで受信して表示できるようなプログラムを目指していますが、APIの使い方が分からないので詳しく教えていただける方がいましたら、サンプルソースまたは参考Webサイトの教示をお願いします。
VB6.0のクラス(MSComm)を追加する方法ではなく、APIを使う方向で回答お願いします。

A 回答 (4件)

>Byte型をString型に変換するところで失敗してしまいます。



VB6の場合は動的バイト配列を直接文字列に代入できたが、
VB.NETではできないようです。

「VB.NET バイト配列 文字列 変換」で検索すると
サンプルが見つかります。
    • good
    • 0
この回答へのお礼

遅くなりましたが、ご回答ありがとうございました。
調査しつつ、進めてまいります。

お礼日時:2006/01/16 12:49

マイクロソフトのサンプルが、中途半端のようです。

(英語のページも同じ)

先ず
Success = ReadFile(hSerialPort, Buffer, BytesWritten, BytesRead, IntPtr.Zero)は
Success = ReadFile(hSerialPort, Buffer, Buffer.Length, BytesRead, IntPtr.Zero)と修正してください。

>どの変数に格納されるのかが分かりません。
読んだデータはBufferに入り、読んだバイト数はBytesReadに入ります。
したがってBufferは予め十分なサイズをRedimしておく必要があります。

Bufferはバイト配列なので、文字列に変換するために次のようにします。(VB6用なので、VB.NET用に修正してください)
Dim myByte() as Byte '作業用バイト配列
Redim myByte( BytesRead-1 ) as Byte
For i = 0 to BytesRead-1
  myByte(i) = Buffer(i)
Next i
Dim myString as String
myString = myByte '文字変数に代入
Dim myUnicode as String
myUnicode = Strconv( myString, vbUnicode ) '内部形式の文字コードに変換
MsgBox( myUnicode )

これでどうでしょうか?

この回答への補足

ReadFileの部分を修正して実行してみたのですが、Next iの次の部分以降で、Byte型をString型に変換するところで失敗してしまいます。この変換はどうすればクリアできるのでしょうか?Hex関数やOct関数なども使ってみましたが、4バイト分しか読み込まれていませんでした。

補足日時:2005/12/19 13:29
    • good
    • 1
    • good
    • 0

マイクロソフトの


[HOWTO] Microsoft Visual Basic .NET を使用してシリアル ポートとパラレル ポートにアクセスする方法
を紹介します。

参考URL:http://support.microsoft.com/default.aspx?scid=k …
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございました。
こちらを参考にしてプログラムを作成しましたが、実行結果を報告します。
1. LPT1のパラレルポートの部分は使わないので、該当部分のソースを削除した結果、シリアルポート(COM3)の読み込みテストは実行されましたが、書き込みテストは失敗しました。
2. シリアルポートの読み込みテストだけを実行するために書き込み部分のソースを削除した結果、強制再起動が発生しました。
3. Windows標準のハイパーターミナルで得られるテキストデータをこのソースを使って読み込みたいのですが、Success = ReadFile(hSerialPort, Buffer, BytesWritten, BytesRead, IntPtr.Zero)のどの変数に格納されるのかが分かりません。
以上について、追加してお尋ねいたしますのでよろしくお願いいたします。

お礼日時:2005/12/16 17:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!