Jajajajaja
Si te fijas,
en ningún momento dije que debia que devolver esos números...
Tu función devuelve un resultado erróneo aquí:
Debug.Print kCompare("feo", " ")
Debería devolver la segunda y devuelve la primera...
Ahora dejo mi versión 2:
Option Explicit
Option Base 0
Private Declare Sub PutMem4 Lib "msvbvm60.dll" (ByVal Ptr As Long, ByVal Value As Long)
Private Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" (Ptr() As Any) As Long
Private Declare Function IsCharUpperW Lib "user32.dll" (ByVal lngChar As Long) As Long
Private lngAscHeader1&(5), lngAscHeader2&(5)
Private intAsc1%(), intAsc2%()
' 0 -> Error
' 1 -> First Word
' 2 -> Equal
' 3 -> Secon Word
Friend Static Function Compare(ByRef strWord1$, ByRef strWord2$) As Long
Dim Q&, L&
L = LenB(strWord1) \ 2
If L = 0 Or LenB(strWord2) = 0 Then Exit Function
lngAscHeader1(3) = StrPtr(strWord1)
lngAscHeader2(3) = StrPtr(strWord2)
For Q = 0 To L
If IsCharUpperW(intAsc1(Q)) Then
intAsc1(Q) = intAsc1(Q) + 32
End If
If IsCharUpperW(intAsc2(Q)) Then
intAsc2(Q) = intAsc2(Q) + 32
End If
If intAsc2(Q) > intAsc1(Q) Then
Compare = 1
Exit Function
ElseIf intAsc2(Q) < intAsc1(Q) Then
Compare = 3
Exit Function
ElseIf Q = L Then
Compare = 2
Exit Function
End If
Next Q
End Function
Private Sub Class_Initialize()
lngAscHeader1(0) = &H1&
lngAscHeader1(1) = &H2&
lngAscHeader1(4) = &H7FFFFFFF
PutMem4 VarPtrArray(intAsc1), VarPtr(lngAscHeader1(0))
lngAscHeader2(0) = &H1&
lngAscHeader2(1) = &H2&
lngAscHeader2(4) = &H7FFFFFFF
PutMem4 VarPtrArray(intAsc2), VarPtr(lngAscHeader2(0))
End Sub
Private Sub Class_Terminate()
PutMem4 VarPtrArray(intAsc1), 0&
PutMem4 VarPtrArray(intAsc2), 0&
End Sub
Ejemplos:
Private Sub Form_Load()
Dim c As New Class1
Debug.Print "---------------------------------------------"
Debug.Print c.Compare("rana", "")
Debug.Print c.Compare("hola", "holas")
Debug.Print c.Compare("bienvenido", "bienvenida")
Debug.Print c.Compare("Ejemplo", "eJempLIficar")
Debug.Print c.Compare("igual", "igual")
Debug.Print c.Compare("PaLaBrA", "palabra")
Debug.Print "---------------------------------------------"
Debug.Print c.Compare("elfo", "elefante")
Debug.Print c.Compare("ave", "zorro")
Debug.Print c.Compare("hola", "")
Debug.Print c.Compare("zero", "zerocool")
Debug.Print c.Compare("feo", " ")
Debug.Print c.Compare("frog", "frog")
Debug.Print c.Compare("faso", "fasa")
Debug.Print c.Compare("JOJO", "jojo")
End Sub
Resultado:
---------------------------------------------
0
1
3
3
2
2
---------------------------------------------
3
1
0
1
3
2
3
2
DoEvents!