- 締切済み
VB6.0 テキストデータの受け取り
VB初心者です。 VB6.0を使用しています。 Agilentのスペアナからのトレースデータをテキストで、"RecvData1"という文字列に受け取らせたいと考えています。 下記のように記述したのですが、RecvData1にテキストデータをうまく受け渡すことができません。 どこを改善すればよろしいでしょうか。 Dim RecvData1 As String stats = viVPrintf(vi, "TRAC:DATA? TRACE1" + Chr$(10), 0) stats = viVScanf(vi, RecvData1, 0) viVScanfの定義 ↓ Public Declare Function viVScanf Lib "VISA32.DLL" Alias "#272" (ByVal vi As Long, ByVal readFmt As String, params As Any) As Long なお、「stats = viVPrintf(vi, "TRAC:DATA? TRACE1" + Chr$(10), 0)」の部分のコマンドが測定機に正しく送られていることは確認済みです。 やりたいことをVisa Assistantを使用して行った場合のC言語の記述と結果 ↓ -------------------------------------------------------------------- viPrintf(vi,"TRAC:DATA? TRACE1\n"); char buf[32768]; int bufLength = sizeof(buf); ViScanf(vi,"%#t", &bufLength, buf); buf[] = {"-28.986280,-30.730440,-44.042957,-68.885155,-80.233..... bufLength = 5071; --------------------------------------------------------------------
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- MARU4812
- ベストアンサー率43% (196/452)
とりあえず、バッファ確保してからにしようよ。 例えば、 RecvData1 = Space(32769) ただし、API に ByVal String 形式で渡した場合、 暗黙の Unicode → ANSI 変換が入るので文字化けする可能性あり。 Byte の配列を使う事を考えた方がいいのかも。 それ以前に viscanf はデータが欠落するという情報もあるので vread() で読み込み、1 バイトずつチマチマになるのかも。 ttp://surf.ml.seikei.ac.jp/~nakano/diary/?0707 ちなみに私は、VISA32 自体使った事無い門外漢ですので信用 しないようにして下さい。10分ほどWEB検索して分かった事を並べた だけですので。
- piroin654
- ベストアンサー率75% (692/917)
>ViScanf(vi,"%#t", &bufLength, buf); の部分では、 ViScanf(vi,型の指定, bufLengthの先頭アドレス, buf); のようになっていて、引数の個数が4。一方、VB6のviVScanfの定義 では、 Public Declare Function viVScanf Lib "VISA32.DLL" Alias "#272" (ByVal vi As Long, ByVal readFmt As String, params As Any) As Long において、引数の個数が3.明らかにVB6とC言語では 関数の定義が異なっていますが? C言語の関数では、第二引数が型の指定であって、 VB6では、 >stats = viVScanf(vi, RecvData1, 0) のように、型指定にはなっていません。もし、仮に VB6の関数の定義通りで、かつデータを受け取るのが VB6で第三引数ならば、 stats = viVScanf(vi,%#t" , RecvData1) あるいは、 stats = viVScanf(vi,"%t" , RecvData1) では?
お礼
回答有難うございます。 回答していただいたように、入力してみたのですが、 stats = viVScanf(vi,"%t" , RecvData1) とすると、うまくいかず。 stats = viVScanf(vi,%#t" , RecvData1) とすると、VBが固まって終了してしまいました。
お礼
回答ありがとうございます。 Dim RecvData1 As * 10000 stats = viVScanf(vi,"%t" , RecvData1) のようにするとデータを受け取らせることができました。