" Cobra marinha" alguém exclamou.
Eu vi uma longa cobra do mar negro nadando nas profundezas do mar e quase todos ficaram atordoados. Mas a cobra marinha disse algo que nos assustou: "Eu sou a famosa corda VB. Se você continuar mergulhando, terá que tentar passar por mim".
Observo isso habitualmente, porque sei que para derrotar um adversário, devo entendê-lo profundamente.
Então escrevi um pequeno CÓDIGO para entendê-lo.
Este código funciona muito bem, exatamente como imaginei, e exibe 12, 24,
Bom, então vou usar o TextOut para imprimir na janela. Por que devo usar esta função e não outras, você se importa? Então eu escrevi o seguinte código
Eu encontrei algo errado? Parece que o comprimento da string está errado. Então penso nisso em VB, a string é do tipo BSTR, então L2 deve ser usado como comprimento. Você saberá depois de tentar.
Ai meu Deus, o Livro do Céu aparece depois do barbante. É Deus me dando uma dica de quando me dar uma linda mulher?
Mas acho que Deus não vai me responder tão cedo, então deve haver algo errado com meu código.
Enquanto eu meditava, todos estavam me observando. De jeito nenhum, ele é tão bonito.
Então eu escrevi rapidamente o seguinte código
Quando pressionei rapidamente F5, houve um eco no céu e a frase “Givemea Beauty” obteve a resposta correta.
Nesse momento, olhei para esta cobra marinha e nadei em sua direção com confiança, mas ela sorriu misteriosamente.
Você já viu o sorriso de uma cobra que nadou lentamente?
“Seria muito fácil para você passar por mim assim.” Alguém no Zodíaco Dourado disse isso?
"Faça um pequeno teste, você sabe a diferença entre vbNullString e "" ?"
“Não pense que você é uma grande pessoa porque é uma cobra marinha. Sua pergunta é muito simples. Um jovem próximo a mim que não é feio e é apelidado de “ O Sétimo Homem Bonito do Mundo ” disse: “ Você acha que eu não li o Guia para a Vida Marinha? " Sim (Navegador de Objetos)
ConstvbNullString=""
Membros do VBA.Constants
Constante usada ao chamar um procedimento externo que requer uma string de valor diferente de zero
“Então você quer dizer que eles são iguais, mas e quanto a vbNullChar?” A cobra marinha olhou para o sétimo homem bonito do mundo com más intenções.
“Claro que é a mesma coisa. Você leu as instruções do VB?”, o sétimo homem bonito do mundo deixou escapar, mas sentiu que algo estava errado. Mas o navegador de objetos do VB diz
Membros do VBA.Constants
Então, o que o código a seguir representa?
Sea Serpent dá seu código
Depois que o sétimo homem bonito do mundo pressionou F5, ele ficou surpreso com os resultados do código Sea Snake.
018992841434596
020
Então isso significa que alguém deve estar errado entre as instruções de VB e Sea Snake. Além disso, para S1, ambos os valores são zero, o ponteiro aponta para zero e o comprimento é zero. Não é um valor zero no sentido comum.
O sétimo homem bonito do mundo virou a cabeça e olhou para mim.
"Rapaz, exiba-se. Vamos, deixe-me mostrar uma coisa primeiro."
“Se você quiser derrotar a cobra marinha, você deve entender a estrutura da cobra marinha.”
A string do VB é uma string BSTR padrão. Por exemplo, a estrutura da string "Hello" é a seguinte.
->-largura="26">0
->-largura="37">0
->-largura="40">'H
->-largura="35">0
->-largura="48">'e'
->-largura="44">0
->-largura="42">'l'
->-largura="40">0
->-largura="40">'l'
->-largura="39">0
->-largura="38">'o'
->-largura="35">0
->-largura="35">0
->-largura="38">0->
Você pode ver que os primeiros quatro bytes representam o número de bytes ocupados pelo comprimento real da string, que é um valor Long.
E os dois últimos bytes são os caracteres finais que representam o valor zero.
Os dez bytes do meio são exatamente o conteúdo da string.
Se usarmos s1 = "Hello", então para onde s1 aponta.
"Inicialmente pensei que s1 apontasse para o primeiro byte, mas quando usei minha ferramenta de observação de memória VB escrita por mim mesmo para observar o valor do byte após strptr(s1) , descobri que s1 apontava para o quinto byte, que é onde nosso a corda realmente começa.”
“Todo mundo conhece a estrutura da cobra marinha, então por que as três situações que ela acabou de propor são diferentes?”, perguntei ao mergulhador que ainda estava atordoado.
"Sim, por quê?"
Ok, pegue seu OleView e abra VB6.DLL em Arquivo->ViewTypeLib. Você viu um mundo maravilhoso?
Abra-os e você verá as definições reais dentro do VB.
Você viu que vbNullString aponta para uma string vazia, mas essa string vazia tem endereço zero . E vbNullChar é um caractere zero (equivalente ao último caractere de uma string em C). Então, vamos dar uma olhada no que acontece quando o código do Sea Snake está em execução.
Quando VB viu esta frase, mudou claramente o valor de S1 para zero.
Quando o VB viu esta frase, ele executou várias ações. Ele usou SysAllocStringLen para alocar uma string BSTR no heap e depois copiou '/0' para essa string.
O VB trabalhou muito aqui. Em primeiro lugar, o VB trata "" como uma constante durante a compilação e deve alocar uma variável internamente para essa string vazia. Quando o arquivo EXE é carregado, ele também deve ser definido como um endereço, embora isso não signifique nada.
é uma string como 000000000000, que requer 6 bytes (quatro bytes de cabeçalho e 2 bytes finais)
Então, quando você vir esta frase, passe o valor do endereço do quinto byte para s3
Portanto, embora você tenha escrito um "" à mão, o VB acabou dando muito mais trabalho. Embora 6 bytes não seja muito, em um projeto grande onde todos escrevem "" em todos os lugares, também é um gasto considerável. Então da próxima vez você não deve usar "" , mas certifique-se de usar vbNullString
“Você disse isso, cobra marinha”, olhei para ela com desprezo.
Vendo a percepção repentina de todos, a cobra marinha riu novamente (as cobras marinhas podem rir?)
"Compreender-me não significa realmente me controlar. Muitos mergulhadores C desprezarão o VB. Você sabe por quê?"
“Lentas, as operações das cordas do VB são muito lentas.” Muitos mergulhadores correram para responder a esta pergunta.
“Haha, sim”, a cobra marinha riu alto e nadou lentamente em direção ao fundo do mar “ Voltarei! ”
Ficamos com um grupo de mergulhadores, todos estão pensando, será que realmente entendemos a cobra marinha, porque a cobra marinha em VB Ocean Legend é bastante assustadora, ela irá embora tão facilmente, e o que significa IwillBack?
Mas continuaremos a mergulhar….
“Olha, o recife de coral” alguém exclamou! ->