1. GetCurrentDirectory 获取当前目录
2. GetModuleFileName 获取完整路径 + PathRemoveFileSpec 分离纯路径
.386
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
include shlwapi.inc ;PathRemoveFileSpec 用
includelib shlwapi.lib
.data
hInstance dd ?
szProfileName db MAX_PATH dup (?)
szFileName db '/test.ini',0 ; 文件名里预含了 /
.code
start: invoke GetModuleHandle,NULL
mov hInstance,eax
invoke GetCurrentDirectory,MAX_PATH,addr szProfileName ; 方法一
mov edi,offset szProfileName
invoke lstrlen,edi
mov ecx,offset szFileName ;ini 文件名
.if byte ptr [edi+eax-1] == '/' ; 当前路径的最后一个字符是 / 吗
inc ecx ; 是,则跳过 ini 文件名的 / ,防止生成两个 //
.endif
invoke lstrcat,edi,ecx ; 连接组成完成路径名 ; 注意这种方法
invoke MessageBox,NULL,edi,NULL,MB_OK
invoke GetModuleFileName,NULL,addr szProfileName,MAX_PATH ; 方法二
invoke PathRemoveFileSpec,addr szProfileName
mov edi,offset szProfileName
invoke lstrlen,edi
mov ecx,offset szFileName
.if byte ptr [edi+eax-1] == '/'
inc ecx
.endif
invoke lstrcat,edi,ecx
invoke MessageBox,NULL,edi,NULL,MB_OK
invoke ExitProcess,NULL
end start