调用api getopenfilename出错

zlf19810306 2006-10-12 05:16:49
通过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'),没有文件对话框出现
...全文
381 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

681

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder API 调用
社区管理员
  • API 调用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧