Saturday 5 August 2017

Delforex Delphi Xe5


Saya memetakan Server yang dibangun di Indy TCP Component dari Delphi 7 ke XE5 untuk mendukung dukungan 64-bit. Sekarang setelah saya melakukan semua port dan berlari server itu bekerja dengan baik dalam lingkungan pengujian. Ini berhasil hebat sampai jumlah pengguna melebihi 400. Setelah itu, hal itu mulai menciptakan kesalahan pelanggaran Akses. Kadang-kadang melanggar pada kesalahan poin saya ke file sumber indy dan kadang-kadang ke jendela CPU. Saya tidak bisa menentukan area kode di sumber saya dimana kesalahan dihasilkan. Sementara kesalahan pelanggaran akses semacam ini berarti saya mengakses beberapa objek yang belum di instantiasikan, namun mengapa tidak terjadi kesalahan saat pengguna kurang online dan seluruh kode sama persis dengan kode Delphi 7, objek diakses dan dibebaskan di Cara yang sama seperti yang saya lakukan di Delphi 7. Saya membaca di suatu tempat bahwa casting pointer terkait barang harus menggunakan NativeInt bukan IntegerCardinal, Sekarang dalam kode di mana saya memproses data yang masuk, kode tersebut terlihat seperti racketofuffle r ini adalah Pointer global yang dideklarasikan di masing-masing Kelas TMyContext, dan PacketBufferPtr adalah variabel Integer yang dideklarasikan di setiap kelas TMyContext Haruskah saya menggunakan NativeInt di sini, bukan Kardinal, ini bisa menjadi akar masalahnya jika ya mengapa tidak menciptakan kesalahan saat pengguna menghitung di bawah 400, saya diuji dengan menggunakan semua Fungsi di lingkungan lokal dan tidak ada satu bagian kode yang menghasilkan kesalahan. Apa yang Anda harus mengerti tentang kode 64 bit adalah bahwa pointer 64 bit lebar. Berbeda dengan kode 32 bit dimana pointer berukuran 32 bit. Sekarang, tipe integer asli Integer dan Cardinal selalu lebar 32 bit. Jelas Anda tidak bisa memasukkan semua nilai 64 bit dalam tipe 32 bit. Anda benar bahwa kode ini rusak di bawah 64 bit. Transmisi pointer 64 bit ke bilangan bulat 32 bit dapat menyebabkan pemotongan. Kode dapat bekerja jika alamat sesuai dengan tipe 32 bit Anda. Jika Anda harus melakukan pemeran seperti itu maka Anda perlu melakukan cast ke NativeInt atau NativeUInt. Dan juga mengganti gips, Anda perlu mendeklarasikan variabel yang memegang pointer sebagai NativeInt atau NativeUInt. Tentu saja, idealnya Anda harus berusaha untuk menghindari gips semacam itu sama sekali. Anda dapat melakukannya dengan tidak menggunakan variabel Integer untuk menyimpan petunjuk. Simpan pointer sebagai petunjuk, hindari casting ke bilangan bulat dan tidak pernah mengalami gangguan penguncian pointer. Konon, nama PacketBufferPtr sangat menyesatkan. Ini bukan pointer seperti namanya. Ini adalah offset. Ini harus diberi nama PacketBufferOffset. Tampaknya masuk akal bahwa itu tidak akan pernah melebihi tinggi (Integer) dan mungkin Integer adalah pilihan yang tepat. Tapi tidak ada salahnya untuk menyatakannya sebagai NativeUInt. Jadi, dengan asumsi Anda menyatakan pointer sebagai PByte. Dan offset sebagai NativeUInt maka kode akan ditulis seperti ini: Dan sekarang kodenya bebas dari gips. Saya sarankan agar Anda mengaktifkan alokasi memori ke atas sebagai alat bantu debugging. Ini akan menyiram lebih banyak bug dari sifat ini. Terima kasih, saya benar-benar membutuhkan operasi memori semacam ini karena data yang diterima perlu disimpan dalam memori global dan saya perlu melacak data yang sebelumnya tersimpan di dalamnya dan di mana menambahkan lebih banyak data di ruang memori yang dialokasikan. Jadi saya harus typecast mereka sebagai NativeInt bukan Kardinal, dan bagaimana mengaktifkan alokasi memori atas ke bawah. Ndash Junaid Noor 20 Mei at 8:09 Rincian alokasi memori ke atas di sini: msdn. microsoften-uslibrarybb190527.aspx walaupun jangan kaget jika perangkat lunak AV Anda lelucon saat Anda mengaktifkan pengaturan ini ndash David Heffernan 20 Mei pukul 8: 13Saya memiliki Telah beberapa lama merilis versi eksperimental GExperts yang menyertakan formatter kode yang sebelumnya dikenal sebagai DelForEx dengan beberapa perbaikan dan perbaikan. Rilis terbaru adalah dari 2008-12-26 dan mendukung versi Delphi berikut ini: Delphi 6 sampai 7 Delphi 2005 sampai 2010 Delphi XE Delphi XE2 to XE7 Harap dicatat, meskipun, bahwa saya menggunakannya hanya dengan Delphi 2007, jadi versi yang lain Mungkin ada bug yang tidak diketahui Selain itu, tidak semua peningkatan bahasa dari versi Delphi nantinya akan berjalan, mis. Tipe bersarang, generik dan metode anonim. Btw: Setiap bantuan memperbaiki formatter, terutama menambahkan konstruksi bahasa baru akan dihargai. Kode sumber dapat didownload dari repositori subversi yang terhubung dari homepage saya. Versi TWM dari GExperts bekerja dengan baik dan terintegrasi dengan baik ke dalam IDE. Ini memungkinkan Anda untuk menulis dan memodifikasi kode Anda tanpa terlalu mengkhawatirkan format yang tepat, lalu tekan hot key yang telah ditetapkan dan langsung melakukan pemformatan ulang. Saya selalu merasa mudah menyesuaikan diri dengan gaya yang saya sukai, dan tidak serumit Format Kode JEDI, yang sepertinya berlebihan bagi saya. Versi Delphi 2009 sekarang tersedia dari link yang diposting di atas, meskipun berdasarkan rilis beta dari GExperts. Masih banyak formatter yang sama di bawahnya, meskipun, dan tidak menyadari sintaks beberapa perangkat tambahan Delphi yang lebih baru. Jawab 31 Des 08 jam 12:19

No comments:

Post a Comment