32位VBA到64位VBA的转换功能

问题描述 投票:0回答:1
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 函数。

excel vba outlook
1个回答
2
投票

我将 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
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.