有段代码看不懂,求解释

IT保安 2014-03-15 12:02:51
.elseif	ax == IDC_BROWSE
invoke wsprintf,offset szBuffer,offset szFormat,offset szFileName;,@stOF.lpstrFile
invoke MessageBox,hWinMain,addr szBuffer,NULL,MB_OK
invoke RtlZeroMemory,addr @stOF,sizeof @stOF
mov @stOF.lStructSize,sizeof @stOF
push hWinMain
pop @stOF.hwndOwner
mov @stOF.lpstrFilter,offset szFileExt
mov @stOF.lpstrFile,offset szFileName
mov @stOF.nMaxFile,MAX_PATH
mov @stOF.Flags,OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST
invoke GetOpenFileName,addr @stOF
.if eax

invoke SetDlgItemText,hWnd,IDC_FILE,addr szFileName

.endif
invoke wsprintf,offset szBuffer,offset szFormat,addr @stOF.lpstrFile
invoke MessageBox,hWinMain,addr szBuffer,NULL,MB_OK

代码如上,摘自win32汇编第13章,@stOF是定义为OPENFILENAME结构。程序功能是打开对话框选择文件。其中这一句,无法理解:
mov			@stOF.lpstrFile,offset szFileName

szFileName是个全局变量,初始为空,在这里将它的地址传给@stOF.lpstrFile,那么@stOF.lpstrFile存储的就是szFileName的地址了吧?
然后
invoke		GetOpenFileName,addr @stOF
,@stOF结构被填充,那么@stOF.lpstrFile中存储的就是选中文件的信息,而不再是szFileName的偏移地址!可是下一句
invoke	SetDlgItemText,hWnd,IDC_FILE,addr szFileName
又是用szFileName作为参数将文件名显示,
我就觉得奇怪,szFileName如何得到了文件信息,这些信息应该都是保存在@stOF.lpstrFile这个指针指向的内存啊?
求解释
...全文
136 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
IT保安 2014-03-18
  • 打赏
  • 举报
回复
谢谢ZARA回复,现在概念有点清晰了
zara 2014-03-17
  • 打赏
  • 举报
回复
这个成员本来就是个地址,当函数成功返回时,所选择的文件名就是存放到那个地址指向的内存处的;你这里将 szFileName 的地址赋予 @stOF.lpstrFile 那 GetOpenFileName() 返回时,szFileName 处就被这个函数填上了所选择的文件名了。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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