„ Seeschlange“, rief jemand.
Ich sah eine lange schwarze Seeschlange tief im Meer schwimmen und fast alle waren benommen. Aber die Seeschlange sagte etwas, das uns Angst machte: „Ich bin die berühmte VB-Saite. Wenn du weiter tauchst, musst du versuchen, an mir vorbeizukommen.“
Ich beobachte es regelmäßig, weil ich weiß, dass man, um einen Gegner zu besiegen, den Gegner tief verstehen muss.
Also habe ich einen kleinen CODE geschrieben, um es zu verstehen.
Dieser Code läuft sehr gut, genau so, wie ich es mir vorgestellt habe, und zeigt 12, 24,
Gut, also werde ich TextOut verwenden, um es im Fenster auszudrucken. Interessiert es Sie, warum ich diese Funktion verwenden muss und andere nicht? Also habe ich den folgenden Code geschrieben
Ich habe etwas Falsches gefunden? Es scheint, dass die Länge der Zeichenfolge falsch ist. In VB ist die Zeichenfolge vom Typ BSTR, also sollte L2 als Länge verwendet werden.
Oh mein Gott, das Buch des Himmels erscheint nach der Zeichenfolge. Zeigt mir Gott, wann er mir eine schöne Frau schenken soll?
Aber ich denke, Gott wird mir nicht so schnell antworten, also muss etwas mit meinem Code nicht stimmen.
Während ich meditierte, beobachteten mich alle. Auf keinen Fall, er sieht so gut aus.
Also habe ich schnell den folgenden Code geschrieben
Als ich schnell F5 drückte, gab es ein Echo am Himmel und der Satz „Givemea beauty“ erhielt die richtige Antwort.
Zu diesem Zeitpunkt schaute ich auf diese Seeschlange und schwamm selbstbewusst auf sie zu, aber sie lächelte geheimnisvoll.
Haben Sie jemals das Lächeln einer Schlange gesehen? Sie schwamm langsam herüber.
„Es wäre zu einfach für dich, einfach so an mir vorbeizugehen.“ Warum kommt dir dieser Satz so bekannt vor? Hat das jemand im Goldenen Tierkreis gesagt?
„Machen Sie einen kleinen Test. Kennen Sie den Unterschied zwischen vbNullString und „“ ?“
„Glauben Sie nicht, dass Sie ein großartiger Mensch sind, denn Sie sind eine Seeschlange . Ihre Frage ist zu einfach.“ Glaubst du, ich habe den Leitfaden zum Meeresleben nicht gelesen? „Ja (Objektbrowser)“
ConstvbNullString=""
Mitglieder von VBA.Constants
Konstante, die beim Aufruf einer externen Prozedur verwendet wird, die eine Zeichenfolge mit einem Wert ungleich Null erfordert
„Dann meinen Sie, dass sie gleich sind, aber was ist mit vbNullChar?“ Die Seeschlange blickte den siebten gutaussehenden Mann der Welt mit bösen Absichten an.
„Natürlich ist es dasselbe. Hast du die VB-Anweisungen gelesen?“ platzte es aus dem siebten gutaussehenden Mann der Welt heraus, aber er hatte das Gefühl, dass etwas nicht stimmte. Aber der Objektbrowser von VB sagt es
Mitglieder von VBA.Constants
Was stellt der folgende Code dar?
Sea Serpent gibt seinen Code bekannt
Nachdem der siebte gutaussehende Mann der Welt F5 gedrückt hatte, war er von den Ergebnissen des Sea Snake-Codes überrascht.
018992841434596
020
Das bedeutet also, dass jemand zwischen den Anweisungen von VB und Sea Snake falsch liegen muss. Darüber hinaus sind für S1 beide Werte Null, der Zeiger zeigt auf Null und die Länge ist Null. Es handelt sich nicht um einen Nullwert im herkömmlichen Sinne.
Dann drehte der siebte gutaussehende Mann der Welt den Kopf und sah mich an.
„Junge, gib an. Komm, lass mich dir zuerst etwas zeigen.“
„Wer die Seeschlange besiegen will, muss den Aufbau der Seeschlange verstehen.“
Die Zeichenfolge von VB ist eine Standard-BSTR-Zeichenfolge. Die Struktur der Zeichenfolge „Hallo“ ist beispielsweise wie folgt
->-width="26">0
->-width="37">0
->-width="40">'H
->-width="35">0
->-width="48">'e'
->-width="44">0
->-width="42">'l'
->-width="40">0
->-width="40">'l'
->-width="39">0
->-width="38">'o'
->-width="35">0
->-width="35">0
->-width="38">0->
Sie können sehen, dass die ersten vier Bytes die Anzahl der Bytes darstellen, die von der tatsächlichen Länge der Zeichenfolge belegt werden, was einem Long-Wert entspricht.
Und die letzten beiden Bytes sind die nachgestellten Zeichen, die den Nullwert darstellen.
Die zehn Bytes in der Mitte entsprechen genau dem Inhalt des Strings.
Wenn wir s1="Hello" verwenden, wohin zeigt s1 dann?
„Zuerst dachte ich, dass s1 auf das erste Byte zeigte, aber als ich mit meinem selbst geschriebenen VB-Speicherbeobachtungstool den Bytewert nach strptr(s1) betrachtete , stellte ich fest, dass s1 auf das fünfte Byte zeigte, das ist unser Die Saite beginnt erst richtig.“
„Jeder kennt die Struktur der Seeschlange. Warum sind die drei Situationen, die sie gerade vorgeschlagen hat, unterschiedlich?“, fragte ich den Taucher, der immer noch benommen war.
„Ja, warum?“
Okay, nehmen Sie Ihr OleView heraus und öffnen Sie VB6.DLL in File->ViewTypeLib. Haben Sie eine wundervolle Welt gesehen und finden Sie die folgenden Teile?
Öffnen Sie sie und Sie sehen die tatsächlichen Definitionen in VB.
Haben Sie gesehen, dass vbNullString auf eine leere Zeichenfolge zeigt, diese leere Zeichenfolge jedoch eine Nulladresse hat? Und vbNullChar ist ein Nullzeichen (entspricht dem letzten Zeichen in einer Zeichenfolge in C). Schauen wir uns also an, was passiert, wenn der Sea Snake-Code ausgeführt wird.
Als VB diesen Satz sah, änderte es den Wert von S1 eindeutig auf Null.
Als VB diesen Satz sah, wurden mehrere Aktionen ausgeführt. Es verwendete SysAllocStringLen, um eine BSTR-Zeichenfolge im Heap zuzuweisen, und kopierte dann „/0“ in diese Zeichenfolge.
VB hat hier viel Arbeit geleistet. Erstens behandelt VB beim Kompilieren „“ als Konstante und muss dieser leeren Zeichenfolge intern eine Variable zuweisen. Beim Laden der EXE-Datei muss diese ebenfalls auf eine Adresse gesetzt werden, was allerdings keine Bedeutung hat.
ist eine Zeichenfolge wie 000000000000, die 6 Bytes benötigt (vier Header-Bytes und 2 Tail-Bytes).
Wenn Sie diesen Satz sehen, übergeben Sie den Adresswert des fünften Bytes an s3
Obwohl Sie ein „“ also nur von Hand geschrieben haben, hat VB am Ende viel mehr Arbeit geleistet. Obwohl 6 Bytes nicht viel sind, sind sie in einem großen Projekt, in dem jeder überall „“ schreibt, auch ein erheblicher Kostenfaktor. Beim nächsten Mal dürfen Sie also nicht „“ verwenden , sondern unbedingt vbNullString verwenden
„Das hast du gesagt, Seeschlange“, ich sah es verächtlich an.
Als die Seeschlange die plötzliche Erkenntnis aller sah, lachte sie erneut (können Seeschlangen lachen?)
„Mich zu verstehen bedeutet nicht, mich wirklich zu kontrollieren. Viele C-Taucher werden VB verachten. Wissen Sie warum?“
„Langsam, die String-Operationen von VB sind zu langsam.“ Viele Taucher beeilten sich, diese Frage zu beantworten.
„Haha, ja“, lachte die Seeschlange laut und schwamm langsam in Richtung Tiefsee „ IchwillZurück! “
Uns bleibt eine Gruppe von Tauchern und jeder denkt: Verstehen wir die Seeschlange wirklich, denn die Seeschlange in VB Ocean Legend ist ziemlich gruselig, wird sie so leicht verschwinden und was bedeutet sie mit IwillBack What? ?
Aber wir werden weiter tauchen….
„Schau, das Korallenriff“, rief jemand! ->