VB では、標準機能のほとんどが Variant の存在に影響を受けている。例えば、IsArray(VarName As Variant) のように「引数になんでも受け取れる」関数が実現されている。
しかし、Variant には入れられないものもある。構造体と、構造体の配列だ。構造体配列を IsArray 関数で調べようとすると、実行時バインディングの関数には渡せないというエラーになる。
同じように、Collection や Scripting.Dictionary などのオブジェクトにも構造体と構造体配列は格納できない。
これでちょっと困ったのは、「0 個以上の構造体を返す」という関数が作れないこと。これがオブジェクトだったら、未初期化の配列に対して IsArray 等の関数で検査すると、長さ 0 の配列になるという Tips が使えるし、普通に Collection に収めて返してもいいんだけど。
まぁ、ByRef 使えば、「要素数」と「構造体配列」を一度に返せるのだけど、あんまり綺麗じゃないような。こだわりすぎ?