" Ular laut" seru seseorang.
Saya melihat seekor ular laut hitam panjang berenang jauh di bawah laut, dan hampir semua orang linglung. Namun ular laut itu mengatakan sesuatu yang membuat kami takut, "Akulah string VB yang terkenal itu. Jika kamu terus menyelam, kamu harus berusaha melewatiku."
Saya biasa mengamatinya, karena saya tahu bahwa untuk mengalahkan lawan, Anda harus memahami lawan secara mendalam.
Jadi saya menulis KODE kecil untuk memahaminya.
Kode ini berjalan sangat baik, persis seperti yang saya bayangkan, dan menampilkan 12, 24,
Bagus, jadi saya akan menggunakan TextOut untuk mencetaknya di jendela. Adapun mengapa saya harus menggunakan fungsi ini dan bukan yang lain, apakah Anda peduli? Jadi saya menulis kode berikut
Saya menemukan sesuatu yang salah? Sepertinya panjang stringnya salah. Lalu saya pikir-pikir. Di VB, stringnya bertipe BSTR, jadi L2 harus digunakan sebagai panjangnya. Apakah ini benar?
Ya Tuhan, Kitab Surga muncul setelah tali itu. Apakah Tuhan memberi isyarat kepadaku kapan harus memberiku wanita cantik?
Tapi menurutku Tuhan tidak akan menjawabku secepat ini, jadi pasti ada yang salah dengan kodeku.
Saat saya bermeditasi, semua orang memperhatikan saya. Tidak mungkin, dia sangat tampan.
Jadi saya segera menulis kode berikut
Saat saya segera menekan F5, terdengar gema di langit, dan kalimat "Givemea beauty" mendapat respon yang benar.
Saat ini, saya melihat ular laut ini dan berenang ke arahnya dengan percaya diri, tetapi ia tersenyum misterius.
Pernahkah Anda melihat senyuman seekor ular? Ia berenang perlahan.
“Akan terlalu mudah bagimu untuk melewatiku begitu saja.” Apakah seseorang di Zodiak Emas mengatakan ini?
"Beri Anda sedikit tes, tahukah Anda perbedaan antara vbNullString dan "" ?"
"Jangan mengira kamu orang hebat karena kamu ular laut. Pertanyaanmu terlalu sederhana." Seorang pemuda di sebelahku yang tidak jelek dan dijuluki " Pria Tampan Ketujuh di Dunia " berkata, " Anda pikir saya belum membaca Panduan Kehidupan Laut? " Ya (Peramban Objek)
ConstvbNullString=""
Anggota VBA.Konstanta
Konstanta digunakan saat memanggil prosedur eksternal yang memerlukan string nilai bukan nol
“Kalau begitu maksudmu mereka sama, tapi bagaimana dengan vbNullChar?” Ular laut itu memandang pria tampan ketujuh di dunia dengan niat jahat.
"Tentu saja sama. Apakah kamu sudah membaca instruksi VB?" sembur pria tampan ketujuh di dunia itu, tapi dia merasa ada yang tidak beres. Tapi browser objek VB mengatakannya
Anggota VBA.Konstanta
Jadi apa yang diwakili oleh kode berikut?
Ular Laut memberikan kodenya
Setelah pria tampan ketujuh di dunia itu menekan F5, ia dikejutkan dengan hasil kode Ular Laut.
018992841434596
020
Berarti pasti ada yang salah antara instruksi VB dan Ular Laut. Selain itu, untuk S1, kedua nilainya adalah nol, penunjuknya menunjuk ke nol, dan panjangnya nol. Ini bukan nilai nol dalam arti biasa.
Pria tampan ketujuh di dunia lalu menoleh dan menatapku.
"Nak, pamer. Ayo, biar kutunjukkan sesuatu dulu."
“Jika ingin mengalahkan ular laut, Anda harus memahami struktur ular laut.”
String VB adalah string BSTR standar. Misalnya, struktur string "Halo" adalah sebagai berikut
->-lebar="26">0
->-lebar="37">0
->-lebar="40">'H
->-lebar="35">0
->-lebar="48">'e'
->-lebar="44">0
->-lebar="42">'l'
->-lebar="40">0
->-lebar="40">'l'
->-lebar="39">0
->-lebar="38">'o'
->-lebar="35">0
->-lebar="35">0
->-lebar="38">0->
Anda dapat melihat bahwa empat byte pertama mewakili jumlah byte yang ditempati oleh panjang sebenarnya dari string, yang merupakan nilai Long.
Dan dua byte terakhir adalah karakter tambahan yang mewakili nilai nol.
Sepuluh byte di tengah persis dengan isi string.
Jika kita menggunakan s1 = "Halo", lalu kemana arah s1.
"Awalnya saya pikir s1 menunjuk ke byte pertama, tetapi ketika saya menggunakan alat observasi memori VB yang saya tulis sendiri untuk melihat nilai byte berikut strptr(s1) , saya menemukan bahwa s1 menunjuk ke byte kelima, di situlah tempat kami string benar-benar dimulai.”
“Semua orang tahu struktur ular laut, jadi mengapa ketiga situasi yang diusulkan berbeda?” Saya bertanya kepada penyelam yang masih linglung.
"Ya, kenapa?"
Oke, keluarkan OleView Anda dan buka VB6.DLL di File->ViewTypeLib. Pernahkah Anda melihat dunia yang indah?
Buka dan Anda akan melihat definisi sebenarnya di dalam VB.
Apakah Anda melihat bahwa vbNullString menunjuk ke string kosong, tetapi string kosong ini memiliki alamat nol . Dan vbNullChar adalah karakter nol (setara dengan karakter terakhir dalam string di C). Jadi mari kita lihat apa yang terjadi ketika kode Sea Snake dijalankan.
Melihat kalimat ini, VB jelas mengubah nilai S1 menjadi nol.
Ketika VB melihat kalimat ini, diperlukan beberapa tindakan. Ia menggunakan SysAllocStringLen untuk mengalokasikan string BSTR di heap, dan kemudian menyalin '/0' ke string ini.
VB telah melakukan banyak pekerjaan di sini. Pertama-tama, VB memperlakukan "" sebagai konstanta saat kompilasi, dan harus mengalokasikan variabel secara internal untuk string kosong ini. Ketika file EXE dimuat, itu juga harus diatur ke alamatnya, meskipun itu tidak berarti apa-apa.
adalah string seperti 000000000000, yang membutuhkan 6 byte (empat byte header dan 2 byte ekor)
Kemudian ketika Anda melihat kalimat ini, teruskan nilai alamat byte kelima ke s3
Oleh karena itu, meskipun Anda hanya menulis "" dengan tangan, VB akhirnya melakukan lebih banyak pekerjaan. Meskipun 6 byte tidak banyak, dalam proyek besar di mana semua orang menulis "" di mana-mana, ini juga merupakan biaya yang besar. Jadi lain kali Anda tidak boleh menggunakan "" , tetapi pastikan untuk menggunakan vbNullString
“Kamu bilang begitu, ular laut”, aku memandangnya dengan nada menghina.
Melihat kesadaran semua orang yang tiba-tiba, ular laut itu tertawa lagi (bisakah ular laut tertawa?)
"Memahami saya tidak berarti benar-benar mengendalikan saya. Banyak penyelam C yang meremehkan VB. Tahukah Anda alasannya?"
“Lambat, operasi string VB terlalu lambat.” Banyak penyelam yang terburu-buru menjawab pertanyaan ini.
"Haha, iya," ular laut itu tertawa keras dan perlahan berenang menuju laut dalam " Aku akan Kembali! "
Kita tinggal sekelompok penyelam, dan semua orang berpikir, apakah kita benar-benar memahami ular laut, karena ular laut di VB Ocean Legend cukup menakutkan, akankah ia pergi begitu saja, dan apa yang dimaksud dengan IwillBack Apa? ?
Tapi kami akan terus menyelam….
"Lihat, terumbu karang" seru seseorang! ->