返答しようと思ったら、理想的な回答が……素晴らしいです。
一応副産物として、妥協案のつもりで作った「複数のファイルが選べるファイル選択ダイアログ」の
モジュールを貼っておきます。
#include "comdlg32.as"
//multi_opendlg 配列名
//複数のファイルを選択できる「開く」ダイアログを開く。
//ユーザーがファイルを選んだ場合、配列名に指定した変数が文字列配列として初期化され、
//そこに選ばれたファイル名が入り、statは配列の要素数になる。
//ユーザーが1つだけファイルを選んだ場合は配列の要素数は1になり、
//そこに選ばれたファイルのフルパスが入る。
//ユーザーが複数のファイルを選んだ場合は配列の要素数は3以上になり、
//最初の要素にはディレクトリ名が、以降の要素にはファイル名が入る。
//キャンセルされるかエラーが起きた場合はstatは0になる。
#module
#const max_chr 65535 //一度に取得できる最大文字数
#deffunc multi_opendlg array arr
c_dir=dir_cur
dim ofn,22
sdim strfile,max_chr*2
ofn=88,hwnd,hinstance,0,0,0,0,varptr(strfile),max_chr,0,0,0,0,0x10080A00
GetOpenFileNameW varptr(ofn) : res=stat
chdir dir_cur
if res=0 : return 0
flag=0 : items=0
repeat max_chr //アイテム数を数える
if wpeek(strfile,cnt*2) {
flag=0
} else {
if flag : break
flag=1
items++
}
loop
if items=0 : return 0
sdim arr,64,items
item_pos=0 : start=0 : cou=0 : flag=0
repeat max_chr
if wpeek(strfile,cnt*2) {
if flag : start=cnt : cou=0 : item_pos++
flag=0
cou++
} else {
if flag : break
flag=1
if cou {
sdim buf,cou*2+2
memcpy buf,strfile,cou*2,0,start*2
arr(item_pos)=cnvwtos(buf)
}
}
loop
dim strfile
return items
#global
multi_opendlg hoge
repeat stat
mes hoge(cnt)
loop