On Sat, 16 Oct 2004 jokorb wrote:

> saya pernah alokasi array of byte sebesar ukuran file SysTask.exe
> (MyHeart/Pesin) untuk diperiksa per karakter isinya, tapi error dengan

> pesan batas maksimum elemen array terlampaui.

Anda tidak akan mendapatkan error message seperti itu saat bekerja dengan
dynamic array. Kalau dengan static array iya. Range check tidak berlaku
pada dynamic array.

> Padahal Anda tahu kan, ukuran SystAsk.exe < 1MB. Bagaimana dengan
> 20MB?

Kalau anda berhasil melakukan GetMem(BytePtrVar, 20 * 1024 * 1204),
seharusnya SetLength(DynArrOfByteVar, 20 * 1024 * 1204) juga akan
berhasil.

Boleh tahu bagaimana cara anda mendeklarasikan variabel dynamic array
tersebut? Juga bagaimana cara mengalokasi memorinya?

> > j> FileRead(FileHandle,arrdin[0], 1024*1024*20)
> > j> Akan terjadi error, batas maksimum array terlewati!

Sekali lagi itu pesan kesalahan yang aneh untuk dynamic array. Untuk
contoh potongan code diatas, anda bisa lakukan seperti ini:

  var
    arrdin: array of Byte; // deklarasi var dynamic array
    ...
    SetLength(arrdin, 1024 * 1024 * 20); // alokasi memori sebesar 20 MB
    ...
    FileRead(FileHandle, arrdin, Length(arrdin) * sizeof(Byte));
    ...

> > Untuk operasional, baik pointer, string atau array dinamis sama
> > efisiennya.
>
> Saya sih, mana mantap. Cuma untuk mebaca file secara biner, misalnya,
> string akan memberi hasil "nyeleweng..."

Saya yakin anda melakukannya dengan cara yang salah. Seharusnya memang
betul dengan menggunakan tipe string bisa dilakukan, dengan catatan tipe
string yang dipakai Longstring bukan Shortstring. Longstring boleh
dianggap sebagai dynamic array of Char atau Byte, bisa dipakai untuk
menampung binary data termasuk null characters. Tentu saja content-nya
bisa jadi truncated kalau di-typecast ke PChar karena PChar akan 'stop'
begitu dapat karakter #0. Ini perlu disadari karena akan terjadi jika
misalnya content string ditampilkan di TEdit atau TMemo control. Controls
tersebut bekerja dengan PChar, jadi bisa menimbulkan kesan isi dari
variabel string corrupt.

Struktur dynamic array dan penanganannya mirip dengan Longstring.
Sama-sama reference-counted juga. Variabel dynamic array adalah implicit
pointer. Bedanya dengan memory pointer biasa adalah manajemen memori dan
lifetime-nya ditangani secara internal oleh sistem.

Coba baca-baca lagi dokumentasi OPLG-nya mas, terutama mengenai dynamic
array itu.

Salam
hans
--



Berlangganan: [EMAIL PROTECTED]
Stop Berlangganan: [EMAIL PROTECTED]
Keluhan Milis(Unbouncing,spam,dll): [EMAIL PROTECTED]



Yahoo! Groups Sponsor
ADVERTISEMENT
click here
Web Bug from http://us.adserver.yahoo.com/l?M=315388.5497957.6576270.3001176/D=groups/S=:HM/A=2372354/rand=223890656


Yahoo! Groups Links

Kirim email ke