调用api getopenfilename出错
通过API打开文件对话框
function long GetOpenFileName(ref s_openfilename lpOpenfilename) LIBRARY "comdlg32.dll" alias for GetOpenFileNameA
function long CopyMemoryfilter(long Destination,ref string Source,long Size) LIBRARY "kernel32.dll" alias for RtlMoveMemory
function long LocalAlloc(long Flags,long Bytes) LIBRARY "kernel32.dll"
function long LocalFree(long MemHandle) LIBRARY "kernel32.dll"
string ls_filter,ls_token,ls_path
long ll_pos,ll_start,ll_open
long MAX_BUFFER_LENGTH = 256
s_openfilename lstr_filename
ls_filter = "All Files (*.*)~t*.*~t"
lstr_filename.lpstrFilter = LocalAlloc(64,Len(ls_filter) + 2)
if lstr_filename.lpstrFilter = 0 then
return ''
end if
ll_start = 1
ll_pos = 0
ll_pos = pos(ls_filter,"~t",1)
do while ll_pos > 0
ls_token = mid(ls_filter,ll_start,ll_pos - ll_start)
CopyMemoryfilter(lstr_filename.lpstrFilter + (ll_start - 1),ls_token,len(ls_token))
ll_start = ll_pos + 1
ll_pos = pos(ls_filter,"~t",ll_pos + 1)
loop
ls_token = Mid(ls_filter,ll_start)
CopyMemoryfilter(lstr_filename.lpstrFilter + (ll_start - 1),ls_token,len(ls_token))
lstr_filename.lStructSize = 76
lstr_filename.hwndOwner = as_handle
lstr_filename.hInstance = 0
lstr_filename.lpstrFile = 0
lstr_filename.nMaxFile = MAX_BUFFER_LENGTH - 1
lstr_filename.lpstrFileTitle = Space(MAX_BUFFER_LENGTH)
lstr_filename.nMaxFileTitle = MAX_BUFFER_LENGTH - 1
lstr_filename.lpstrInitialDir = 'C:\'
lstr_filename.lpstrTitle = 'Open File'
lstr_filename.nFilterIndex = 1
lstr_filename.flags = 0
ll_open = GetOpenFileName(lstr_filename)
if ll_open = 1 then
ls_path = lstr_filename.lpstrFileTitle
else
messagebox('note','false')
ls_path = '1'
end if
LocalFree(lstr_filename.lpstrFilter)
return ls_path
运行之后就提示messagebox('note','false'),没有文件对话框出现