• ベストアンサー

変数のタイプ

Active Basicを使ってプログラムを書いています。 そのときに、変数というものがいまいち理解できなく、感覚で適当にしてしまいます。 たとえば、ファイルをを開くのダイアログボックスでファイルパスを取得するとき、Active Basicの本では、その文字列を格納するのに、 『Byte』を使っていました。 Dim buffer[MAX_PATH-1] As Byte といった風です。 しかし、本には、 バイト数:1 値の範囲:0~255 と書いてあります。 文字列を取得する場合はStringを使うのではないでしょうか? Byteでも、文字列を格納できるのでしょうか? 他にも、LongやDWordやIntegerやSingle、Dobleといったものがありますが、どう使い分けていいのかがわかりません。 すみませんが、分かる方、いらっしゃいましたらご教授願えませんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

『ファイルを開く』のダイアログには OPENFILENAME構造体を使うと思います この構造体に初期設定を施して GetOpenFileNameを使い 関数から戻った際に 引数の構造体のメンバからファイル名などを取り出す といった流れになります このとき GetOpenFileNameでは あらかじめファイル名用に用意された受け皿が必要になります ... 他にも設定するのはありますが このファイル名用に与えられたメンバーの型がBytePtrになっています これは Byte型のデータを格納する先頭の(メモリー)番地という型です Byte型の配列であれば その変数名を直接記述すればOKです dim ofn as OPENFILENAME dim buf[256] as byte ofn.lpstrFileTitle = buf String型の場合は ZeroStringで領域を確保、StrPtr関数の返り値を代入 dim ofn as OPENFILENAME dim buf2 as String buf2 = ZeroString(256) ofn.lpstrFileTitle = StrPtr(buf2) といった具合になります Byte型の配列から文字列への変換には MakeStr関数で行います dim sFname as String sFname = MakeStr( ofn.lpstrFileTitle ) String型の変数を StrPtr関数でポインタにした場合は GetOpenFileNameから戻った時点で 代入されています Byte配列の場合は APIを使う前には変換不要、APIから戻った時点で文字列への変換が必要 String型の場合 APIを使う前に ZeroStringなどであらかじめデータの格納領域を確保して StrPtrで変換が必要、APIから戻った時点では変換不要 といった違いがあります Long、DWord、Integer、Single、Doubleなどは扱えるデータの範囲などによって選択すればいいでしょう 単純な整数ならInteger、32767(-32768)を超える整数ならLong 符号なしの整数なら WordやDWord 少数を扱うなら Single、有効桁数が8桁以上必要ならDoubleといった具合です 3.14159265358979323846 を扱いたい場合 3.1415926 で良ければ Single 3.14159265358 までの精度が必要なら Double といった具合に選択します

その他の回答 (2)

  • gonbee774
  • ベストアンサー率38% (198/511)
回答No.2

>Dim buffer[MAX_PATH-1] As Byte ANo.1さんもおっしゃっていますが、これはBYTEの配列(要素がMAX_PATH+1)になります。 よって、MAX_PATH文字までの文字列を扱うことができます。 文字列の後ろには終端文字がつくため、要素はひとつ多く確保します。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

ファイルパスの取得にWindowsAPIを使ってませんか? WindowsAPIのレベルでは文字列はバイトが並んだものになります(バイトの配列)。 多分 ActiveBASICでいうところの「文字列」にするためには 何か一アクションはいると思うのですが。

関連するQ&A