by 河川屋 » 2006年5月01日(月) 22:28
MakeStrでも動くでしょうが、元プログラムが意図どおりに動かないのは文法ミス×2のため。
正しくは、
Dim Otamesi[255] As Byte
Dim i as Integer
lstrcpy(Otamesi,"おためしの文字列")
Open "send-log.ini" For Append As #2 '末尾に追加でひらく
i=0
While Otamesi(i)<>0
Write #2,Chr$(Otamesi(i)); 'Print #2,Chr$(Otamesi(i)); のほうが普通か?
i=i+1
Wend
Write #2, ' 最後に改行。
close #2
間違った箇所は2箇所。
1.Dim Otamesi[255] As Byteは、1バイト整数の宣言であり文字列を宣言している
わけではない。よって、WriteやPrintで出力する場合、当然数値を出力する。
2.BASIC基本命令では配列名を受け渡すことはできない。
よって、Write #2,Otamesi という構文は認められない。エラーにならないのは、
ActiveBasicのバグ。
(関数はこの限りでないので、MakeStrなどは大丈夫)。
あと、ファイルに書く途中で改行しないように組む必要があります。
で、それ以前の問題として、
Dim Otamesi As String
Otamesi="おためしの文字列"
MessageBox(0,Otamesi,"おためしの文字列",MB_OK)
Open "send-log.ini" For Append As #2 '末尾に追加でひらく
Write #2,Otamesi
close #2
というように、BASICで初期からサポートしている文字型を利用すればよいのであり、
FORTRAN70由来の「整数配列に文字をブチ込む」という、
更に古くさい方法を使っているのが諸悪の根源と思うけど.....。
MakeStrでも動くでしょうが、元プログラムが意図どおりに動かないのは文法ミス×2のため。
正しくは、
Dim Otamesi[255] As Byte
Dim i as Integer
lstrcpy(Otamesi,"おためしの文字列")
Open "send-log.ini" For Append As #2 '末尾に追加でひらく
i=0
While Otamesi(i)<>0
Write #2,Chr$(Otamesi(i)); 'Print #2,Chr$(Otamesi(i)); のほうが普通か?
i=i+1
Wend
Write #2, ' 最後に改行。
close #2
間違った箇所は2箇所。
1.Dim Otamesi[255] As Byteは、1バイト整数の宣言であり文字列を宣言している
わけではない。よって、WriteやPrintで出力する場合、当然数値を出力する。
2.BASIC基本命令では配列名を受け渡すことはできない。
よって、Write #2,Otamesi という構文は認められない。エラーにならないのは、
ActiveBasicのバグ。
(関数はこの限りでないので、MakeStrなどは大丈夫)。
あと、ファイルに書く途中で改行しないように組む必要があります。
で、それ以前の問題として、
Dim Otamesi As String
Otamesi="おためしの文字列"
MessageBox(0,Otamesi,"おためしの文字列",MB_OK)
Open "send-log.ini" For Append As #2 '末尾に追加でひらく
Write #2,Otamesi
close #2
というように、BASICで初期からサポートしている文字型を利用すればよいのであり、
FORTRAN70由来の「整数配列に文字をブチ込む」という、
更に古くさい方法を使っているのが諸悪の根源と思うけど.....。