電子書籍の厳選無料作品が豊富!

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;
--------------------------------------------------------------------

A 回答 (2件)

とりあえず、バッファ確保してからにしようよ。



例えば、
 RecvData1 = Space(32769)

ただし、API に ByVal String 形式で渡した場合、
暗黙の Unicode → ANSI 変換が入るので文字化けする可能性あり。
Byte の配列を使う事を考えた方がいいのかも。

それ以前に viscanf はデータが欠落するという情報もあるので
vread() で読み込み、1 バイトずつチマチマになるのかも。
ttp://surf.ml.seikei.ac.jp/~nakano/diary/?0707

ちなみに私は、VISA32 自体使った事無い門外漢ですので信用
しないようにして下さい。10分ほどWEB検索して分かった事を並べた
だけですので。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
Dim RecvData1 As * 10000 
stats = viVScanf(vi,"%t" , RecvData1)
のようにするとデータを受け取らせることができました。

お礼日時:2011/07/17 08:34

>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)

では?
    • good
    • 0
この回答へのお礼

回答有難うございます。

回答していただいたように、入力してみたのですが、

stats = viVScanf(vi,"%t" , RecvData1)
とすると、うまくいかず。

stats = viVScanf(vi,%#t" , RecvData1)
とすると、VBが固まって終了してしまいました。

お礼日時:2011/07/08 08:51

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


このQ&Aを見た人がよく見るQ&A