当前位置: 代码迷 >> 汇编语言 >> 有段代码看不懂,求解释解决思路
  详细解决方案

有段代码看不懂,求解释解决思路

热度:211   发布时间:2016-05-02 04:38:59.0
有段代码看不懂,求解释
.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是个全局变量,初始为空,[email protected],[email protected]
然后
invoke		GetOpenFileName,addr @stOF
,@stOF结构被填充,[email protected],而不再是szFileName的偏移地址!可是下一句
invoke	SetDlgItemText,hWnd,IDC_FILE,addr szFileName
又是用szFileName作为参数将文件名显示,
我就觉得奇怪,szFileName如何得到了文件信息,[email protected]?的内存啊?
求解释
------解决方案--------------------
这个成员本来就是个地址,当函数成功返回时,所选择的文件名就是存放到那个地址指向的内存处的;你这里将 szFileName 的地址赋予 @stOF.lpstrFile 那 GetOpenFileName() 返回时,szFileName 处就被这个函数填上了所选择的文件名了。
  相关解决方案