7,763
社区成员
发帖
与我相关
我的任务
分享
Private Declare Function lstrcpyA Lib "kernel32" (ByVal RetVal As String, ByVal Ptr As Long) As Long
Private Declare Function lstrlenA Lib "kernel32" (ByVal Ptr As Any) As Long
'获取指定字符串指针包含的字符串文本(以 0 结尾字符串)
Private Function GetStrFromPtrA(ByVal lpszA As Long) As String
GetStrFromPtrA = String$(lstrlenA(ByVal lpszA), 0)
Call lstrcpyA(ByVal GetStrFromPtrA, ByVal lpszA)
End Function
'获取指定字符串指针包含的字符串文本(以 0 结尾字符串)
Private Function GetStrFromPtrA(ByVal lpszA As Long) As String
GetStrFromPtrA = String$(MAX_PATH, vbNullChar) 'MAX_PATH = 260
Call lstrcpyA(ByVal GetStrFromPtrA, ByVal lpszA)
GetStrFromPtrA = Left$(GetStrFromPtrA, InStr(1, GetStrFromPtrA, vbNullChar) - 1)
End Function
Private Declare Function PathFindFileName Lib "shlwapi" Alias "PathFindFileNameA" (ByVal pPath As String) As Long
'获取指定路径中的文件名或最后的子目录名
Public Function FindFileName(ByVal lpPath As String) As String
Dim lRet As Long
lpPath = lpPath & vbNullChar
lRet = PathFindFileName(lpPath) '这个取得的就是要获取的字符串的内存指针了
FindFileName = GetStrFromPtrA(lRet) '尝试用上面的子程序获取
End Function
Private Declare Function PathFindFileName Lib "shlwapi" Alias "PathFindFileNameA" (ByVal pPath As Long) As Long
Public Function FindFileName(ByVal lpPath As String) As String
Dim lRet As Long
Dim a() As Byte
a = StrConv(lpPath & vbNullChar, vbFromUnicode)
lRet = PathFindFileName(VarPtr(a(0)))
FindFileName = GetStrFromPtrA(lRet)
End Function