Program-03 アトムを利用する
Q そもそも「アトム」とは何ですか?そしてアトムを利用すると、何か便利なことはあるのでしょうか。あるのであれば使い方を教えてください。
A 今回はまず解説からにしましょうか。
そもそも「アトム」とは、(私も説明しにくいのですが)文字列を内部で保持して、ある数値(これがアトム)で文字列を管理する、というものです。
ですから、"Hello World!"という文字列を、数値で保持しておくことができるのです。
また、このアトムですが、1つのプログラムだけで使えるアトム(ローカルアトム)については、わざわざ終了処理をしなくてもよいのです。
(※アトムには「文字列アトム」「整数アトム」がありますが、ここでは「文字列アトム」を指すこととします。)
こうなると、プログラム的に便利なこともあります。
例えば、100個の(可変の)文字列を配列に格納するときに、String型の配列はサイズを変えられません(多分)。
そうなると、Dim lpStr[99] As BytePtr と変数を宣言し、そこに文字列を格納することになりますが、1つ1つの要素にメモリを確保してから文字列を格納し、プログラム終了時に解放する、という何とも面倒な作業が付いてきます。
100個ほどの文字列ならば、アトムを使えば処理は比較的簡単になります。
どう使う?
'関数の宣言(コードの一番上の部分に書くことを推奨)
Declare Function AddAtom Lib "kernel32" Alias "AddAtomA" (lpString As String) As Word
Declare Function GetAtomName Lib "kernel32" Alias "GetAtomNameA" (nAtom As Word,lpBuffer As String,nSize As Long) As Word
'グローバル変数の宣言
Dim wAtom[4] As Word
'文字列の登録
Dim i As DWord
For i=0 To 4
wAtom[i]=AddAtom(Chr$(i+97))
Next
'文字列の取得
Dim i As DWord
Dim Buf As String
Buf=ZeroString(128)
For i=0 To 4
GetAtomName(wAtom[i],Buf,128)
MsgBox NULL,Buf
Next
いかがですか?
アトムは、メモリ上に保持されるリストボックスのようなものです。
アトムを使えば、最大で16384個の文字列を扱うことができます。
但し、1つの文字列の長さは255バイトまで、という制限はあります。
それでも、このような方法で文字列を扱えるのは、時によっては便利なこともあると思います。
「どういうときに使えばよいか?」と言われたら正直困ってしまいますが、「こんなことができるんだ」という程度で頭に置いておくと、後々便利かもしれません。