私が過去に作ったモジュールですが。
#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_FORCESHOWHIDDEN | OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_HIDEREADONLY = 0x10080A04
	ofn=88,hwnd,hinstance,0,0,0,0,varptr(strfile),max_chr,0,0,0,0,0x10080A04
	GetOpenFileNameW varptr(ofn) : res=stat
	chdir c_dir
	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
mes stat
repeat stat
	mes hoge(cnt)
loop