Remarque: cette réponse a été rédigée à l'origine par l'OP, Kibbee, comme réponse personnelle. Cependant, il a été écrit dans le corps de la question, pas comme une réponse séparée réelle. Étant donné que le PO a refusé les demandes répétées d'autres utilisateurs, y compris un modérateur, de les rediffuser conformément aux règles du site, je le republie moi-même.
Après avoir essayé une centaine de choses différentes, refactorisation mon code, pas à pas dans le code dans le débogueur plusieurs fois, et même d'avoir un regard collègue dans le problème, je enfin, dans un éclair de génie, découverte la réponse.
À un certain moment où je refactoring le code, j'ai changé la fonction pour se débarrasser du paramètre de valeur, laissant comme suit:
Public Function GetSomeStringValue() As String
... Code Goes here
Return Some_Multicharacter_String
End Function
Cependant, je négligeais pour supprimer le paramètre que je repassais en lorsque vous appelez la fonction:
SomeStringValue = GetSomeStringValue(Value)
le compilateur ne se plaint pas parce qu'il a interprété ce que je faisais en appelant la fonction sans parenthèses, ce qui est une caractéristique héritée de l'époque VB6. Ensuite, le paramètre Value est transformé en index de tableau de la chaîne (également appelée tableau de caractères) renvoyée par la fonction.
Je retiré le paramètre, et tout a bien fonctionné:
SomeStringValue = GetSomeStringValue()
je signale cela pour que d'autres personnes reconnaissent le problème quand/s'ils rencontrent jamais, et sont en mesure de résoudre beaucoup plus vite que moi. Il m'a fallu du temps pour le résoudre, et j'espère pouvoir sauver les autres.
Une autre raison de ne pas aimer les langages où les arguments et les index de tableau semblent identiques ... –
Wow, c'est un gotcha vraiment impressionnant. –
Il ne devrait pas rester sans réponse si – CheGueVerra