Option Explicit
Option Compare Text
Option Base 1
Private Declare PtrSafe Function lstrlen Lib "kernal32" Alias "lstrlenW" ( _
ByVal lpString As Long) As LongPtr
Private Declare PtrSafe Function StrTrim Lib "shlwapi" Alias "StrTrimW" ( _
ByVal pszSource As Long, _
ByVal pszTrimChars As Long) As LongPtr
Private Function TrimWS(ByVal Text As String) As String
'unicode safe
Dim WHITE_SPACE As String
WHITE_SPACE = " " & vbTab & vbCr & vbLf & Chr(1) & Chr(2) & Chr(3) & Chr(4) & Chr(5) & Chr(6) & Chr(7) & Chr(8) & Chr(9) & Chr(10) & Chr(11) & Chr(12) & Chr(13) & Chr(14) & Chr(15) & Chr(16) & Chr(17) & Chr(18) & Chr(19) & Chr(20) & Chr(21) & Chr(22) & Chr(23) & Chr(24) & Chr(25) & Chr(26) & Chr(27) & Chr(28) & Chr(29) & Chr(30) & Chr(31) & Chr(32) & ChrW(&HA0)
If StrTrim(StrPtr(Text), StrPtr(WHITE_SPACE)) Then
TrimWS = Left$(Text, lstrlen(StrPtr(Text)))
Else
TrimWS = Text
End If
End Function
当我切换到 64 位时,此功能不起作用。
StrPtr
区域似乎出现错误,因为这在 64 位中不存在。而且 lstrlen
似乎也不起作用。它给出了不匹配错误。
我尝试将原来的功能换成
LongPtr
。我不确定这个函数的作用,但它正在获取所有这些字符代码并对其进行测试。如果存在,则正在运行 lstrlen 函数。
我将 LongPtr 设置在错误的位置。现在效果很好。
Private Declare PtrSafe Function lstrlen Lib "Kernel32" Alias "lstrlenW" ( _
ByVal lpString As LongPtr) As Long
Private Declare PtrSafe Function StrTrim Lib "shlwapi.dll" Alias "StrTrimW" ( _
ByVal pszSource As LongPtr, _
ByVal pszTrimChars As LongPtr) As Long