すみません。(以下コピペ)
;***** フォルダ選択ダイアログ表示  (comobj20.hsp) *****
	newcom ShellApp, "Shell.Application"
	sdim Folder,260
	objFolder=ShellApp("BrowseForFolder",hwnd,"フォルダの選択",0,dirinfo(1))
	;▼キャンセルの場合
	if varuse(objFolder)==0 {
		dialog "キャンセルされました。",0,"フォルダの選択"
		ShellApp  = 0
		objFolder = 0
		stop
	}
	;▼OKの場合は、選択されたパス名を取得する
	objItems=objFolder("Items") : objItem=objItems("Item")
	Folder=objItem("Path")
	;▼取得したフォルダ名を表示
	mes Folder
	;▼オブジェクト変数の解放
	objFolder=0
	objItems =0
	objItem  =0
	ShellApp =0
	stop
*owari
	;▼COMオブジェクト型で、有効なCOMオブジェクトを保持しているか判定
	if vartype(objFolder)==6 {
		if varuse(objFolder)==1 : objFolder = 0
	}
	if vartype(objItems)==6 {
		if varuse(objItems)==1  : objItems = 0
	}
	if vartype(objItem)==6 {
		if varuse(objItem)==1   : objItem = 0
	}
	if vartype(ShellApp)==6 {
		if varuse(ShellApp)==1  : ShellApp = 0
	}
	end
だと上手くいきますが、
;***** フォルダ選択ダイアログ表示  (foldialog.hsp) [ API版 ] *****
	#module
	;▼必要となるAPIや定数の定義
	#uselib "shell32.dll"
	#func  SHGetPathFromIDList "SHGetPathFromIDList" int,int
	#func  SHBrowseForFolder "SHBrowseForFolderA" int
	#uselib "ole32.dll"
	#func  CoTaskMemFree "CoTaskMemFree" int
	#uselib "user32.dll"
	#func  SendMessage "SendMessageA" int,int,int,int
	#deffunc foldlg str prm1,str prm2,int prm3
	;*******************************************************************************
	;   フォルダ選択ダイアログ (foldlg)
	;
	;   戻り値 : 成功 stat=0, refstr=選択フォルダ名,失敗, stat=1
	;
	;   ・書式     foldlg dlgtitle,deffolder,nOption
	;   ・引数     dlgtitle  (str) : ダイアログタイトル名 (省略可)
	;              deffolder (str) : 初期フォルダ名
	;              nOption   (int) : 0,1,$400(0) スタイルオプション値
	;*******************************************************************************
	mref ref,65
	ls=strlen(prm1)
	dlgtitle  = prm1
	if ls==0 : dlgtitle="フォルダを選択して下さい"
	sdim deffolder,260
	deffolder = prm2
	if strlen(deffolder)==0 : deffolder=exedir
	nOption   = prm3  ;(0,1,$4000)
	if (nOption!0)|(nOption!1)|(nOption!$4000) : nOption=0
	dim browsinfo,64 : sdim retbuf,260
	browsinfo(0) = hwnd
	browsinfo(3) = varptr(dlgtitle)
	browsinfo(4) = nOption
	;BrowseCallback
	;初期フォルダ指定可能
	;
	if deffolder!="" {
			dim brproc, 9
			browsinfo(5)=varptr(brproc) : browsinfo(6)=varptr(deffolder)
			p=varptr(SendMessage)
			brproc    = $08247C83, $90177501, $102474FF, $6668016A, $FF000004
			brproc(5) = $B8102474, p, $C031D0FF, $000010C2
	}
	SHBrowseForFolder varptr(browsinfo)     : pidl=stat
	SHGetPathFromIDList pidl,varptr(retbuf) : pidl=stat
	CoTaskMemFree pidl
	ref=retbuf : ls=strlen(retbuf)
	if ls==0 : ret=1 : else : ret=0
	dim browsinfo,0  : sdim retbuf,0 : sdim deffolder,0
	return ret
	#global
	;***** sample *****
	foldlg "",dir_exe,0
	if stat=1 : stop
	color 0,0,255 : pos 20,10 : mes refstr
	stop
だと途中で動作が止まります。
何故でしょう?
長文失礼しました。