" Serpent de mer " s'est exclamé quelqu'un.
J'ai vu un long serpent de mer noir nageant au fond de la mer, et presque tout le monde était hébété. Mais le serpent de mer a dit quelque chose qui nous a fait peur : « Je suis la fameuse corde VB. Si vous continuez à plonger, vous devez essayer de me dépasser.
Je l'observe habituellement, car je sais que pour vaincre un adversaire, il faut le comprendre profondément.
J'ai donc écrit un petit CODE pour le comprendre.
Ce code fonctionne très bien, exactement comme je l'imaginais, et affiche 12, 24,
Bien, je vais donc utiliser TextOut pour l'imprimer dans la fenêtre. Quant à savoir pourquoi je dois utiliser cette fonction et pas d'autres, cela vous importe ? J'ai donc écrit le code suivant
J'ai trouvé quelque chose qui ne va pas ? Il semble que la longueur de la chaîne soit incorrecte. Ensuite, j'y pense. En VB, la chaîne est de type BSTR, donc L2 devrait être utilisée comme longueur. Est-ce vrai ?
Oh mon Dieu, le Livre du Ciel apparaît après la ficelle. Est-ce Dieu qui me dit quand me donner une belle femme ?
Mais je pense que Dieu ne me répondra pas si tôt, donc il doit y avoir un problème avec mon code.
Pendant que je méditais, tout le monde me regardait. Pas question, il est si beau.
J'ai donc rapidement écrit le code suivant
Lorsque j'ai rapidement appuyé sur F5, il y a eu un écho dans le ciel et la phrase « Givemea beauty » a obtenu la bonne réponse.
À ce moment-là, j'ai regardé ce serpent de mer et j'ai nagé vers lui avec confiance, mais il souriait mystérieusement.
Avez-vous déjà vu le sourire d'un serpent qui nageait lentement.
"Ce serait trop facile pour toi de m'ignorer comme ça." Pourquoi cette phrase est-elle si familière ? Est-ce que quelqu'un dans le Zodiaque Doré a dit cela ?
"Faites un petit test, connaissez-vous la différence entre vbNullString et "" ?"
" Ne pensez pas que vous êtes une personne formidable parce que vous êtes un serpent de mer. Votre question est trop simple. " Un jeune homme à côté de moi qui n'est pas laid et surnommé " Le septième bel homme du monde " a dit : " Vous pensez que je n'ai pas lu le Guide de la vie marine " Ouais (Object Browser) ?
ConstvbNullString=""
Membres de VBA.Constantes
Constante utilisée lors de l'appel d'une procédure externe nécessitant une chaîne de valeur non nulle
" Alors tu veux dire qu'ils sont pareils, mais qu'en est-il de vbNullChar ? " Le serpent de mer regarda le septième bel homme du monde avec de mauvaises intentions.
"Bien sûr, c'est pareil. Avez-vous lu les instructions VB ?", lâcha le septième bel homme du monde, mais il sentit que quelque chose n'allait pas. Mais le navigateur d'objets de VB dit
Membres de VBA.Constantes
Alors que représente le code suivant ?
Sea Serpent donne son code
Après que le septième bel homme du monde ait appuyé sur F5, il a été surpris par les résultats du code Sea Snake.
018992841434596
020
Cela signifie donc que quelqu'un doit se tromper entre les instructions de VB et Sea Snake. De plus, pour S1, les deux valeurs sont nulles, le pointeur pointe vers zéro et la longueur est nulle. Ce n'est pas une valeur nulle au sens ordinaire.
Le septième bel homme du monde tourna alors la tête et me regarda.
"Garçon, montre-toi. Allez, laisse-moi d'abord te montrer quelque chose."
"Si vous voulez vaincre le serpent de mer, vous devez comprendre la structure du serpent de mer."
La chaîne de VB est une chaîne BSTR standard. Par exemple, la structure de la chaîne "Bonjour" est la suivante.
->-largeur="26">0
->-width="37">0
->-width="40">'H
->-largeur="35">0
->-width="48">'e'
->-largeur="44">0
->-width="42">'l'
->-largeur="40">0
->-width="40">'l'
->-largeur="39">0
->-width="38">'o'
->-largeur="35">0
->-largeur="35">0
->-width="38">0->
Vous pouvez voir que les quatre premiers octets représentent le nombre d'octets occupés par la longueur réelle de la chaîne, qui est une valeur Long.
Et les deux derniers octets sont les caractères de fin représentant la valeur zéro.
Les dix octets au milieu correspondent exactement au contenu de la chaîne.
Si nous utilisons s1="Bonjour", alors où pointe s1.
"Au départ, je pensais que s1 pointait vers le premier octet, mais lorsque j'ai utilisé mon outil d'observation de la mémoire VB auto-écrit pour examiner la valeur de l'octet suivant strptr(s1) , j'ai découvert que s1 pointait vers le cinquième octet, c'est là que notre la chaîne commence vraiment.
"Tout le monde connaît la structure du serpent de mer, alors pourquoi les trois situations qu'il vient de proposer sont-elles différentes ?", ai-je demandé au plongeur qui était encore hébété.
"Ouais, pourquoi ?"
D'accord, sortez votre OleView et ouvrez VB6.DLL dans Fichier->ViewTypeLib. Avez-vous vu un monde merveilleux ? Ne soyez pas hébété et trouvez les parties suivantes.
Ouvrez-les et vous verrez les vraies définitions dans VB.
Avez-vous vu que vbNullString pointe vers une chaîne vide, mais cette chaîne vide a une adresse nulle . Et vbNullChar est un caractère zéro (équivalent au dernier caractère d'une chaîne en C). Jetons donc un coup d'œil à ce qui se passe lorsque le code Sea Snake est exécuté.
Lorsque VB a vu cette phrase, il a clairement changé la valeur de S1 à zéro.
Lorsque VB a vu cette phrase, il a effectué plusieurs actions. Il a utilisé SysAllocStringLen pour allouer une chaîne BSTR dans le tas, puis a copié « / 0 » dans cette chaîne.
VB a fait beaucoup de travail ici. Tout d'abord, VB traite "" comme une constante lors de la compilation, et il doit allouer une variable en interne pour cette chaîne vide. Lorsque le fichier EXE est chargé, il doit également être défini sur une adresse, même si cela ne veut rien dire.
est une chaîne comme 000000000000, qui nécessite 6 octets (quatre octets d'en-tête et 2 octets de queue)
Ensuite, lorsque vous voyez cette phrase, transmettez la valeur d'adresse du cinquième octet à s3
Par conséquent, même si vous venez d'écrire un "" à la main, VB a fini par faire beaucoup plus de travail. Même si 6 octets, ce n'est pas grand-chose, dans un grand projet où tout le monde écrit "" partout, c'est aussi une dépense considérable. Donc la prochaine fois, vous ne devrez pas utiliser "" , mais assurez-vous d'utiliser vbNullString
"Tu as dit ça, serpent de mer", je l'ai regardé avec mépris.
Voyant la prise de conscience soudaine de tout le monde, le serpent de mer rit à nouveau (les serpents de mer peuvent-ils rire ?)
"Me comprendre ne signifie pas vraiment me contrôler. De nombreux plongeurs C dédaigneront VB. Savez-vous pourquoi ?"
"Lent, les opérations sur les cordes de VB sont trop lentes." De nombreux plongeurs se sont précipités pour répondre à cette question.
"Haha, oui," le serpent de mer rit bruyamment et nagea lentement vers les profondeurs de la mer. " Je reviendrai ! "
Nous nous retrouvons avec un groupe de plongeurs, et tout le monde se demande : comprenons-nous vraiment le serpent de mer, car le serpent de mer dans VB Ocean Legend est assez effrayant, s'éloignera-t-il si facilement, et qu'est-ce que cela signifie par IwillBack Quoi ? ?
Mais nous continuerons à plonger….
"Regardez, la barrière de corail", s'est exclamé quelqu'un ! ->