Struktur SAFEARRAY (oaidl.h)
Mewakili array yang aman.
Sintaks
typedef struct tagSAFEARRAY {
USHORT cDims;
USHORT fFeatures;
ULONG cbElements;
ULONG cLocks;
PVOID pvData;
SAFEARRAYBOUND rgsabound[1];
} SAFEARRAY;
Anggota
cDims
Jumlah dimensi.
fFeatures
Bendera.
Nilai | Makna |
---|---|
|
Array yang dialokasikan pada tumpukan. |
|
Array yang dialokasikan secara statis. |
|
Array yang disematkan dalam struktur. |
|
Array yang mungkin tidak diubah ukurannya atau direalokasikan. |
|
Array yang berisi rekaman. Ketika diatur, akan ada penunjuk ke antarmuka IRecordInfo pada offset negatif 4 dalam deskriptor array. |
|
Array yang memiliki antarmuka identifikasi IID. Ketika diatur, akan ada GUID pada offset negatif 16 dalam deskriptor array aman. Bendera diatur hanya saat FADF_DISPATCH atau FADF_UNKNOWN juga diatur. |
|
Array yang memiliki jenis varian. Jenis varian dapat diambil dengan SafeArrayGetVartype. |
|
Array BSTR. |
|
An array of IUnknown*. |
|
An array of IDispatch*. |
|
Array VARIAN. |
|
Bit dicadangkan untuk digunakan di masa mendatang. |
cbElements
Ukuran elemen array.
cLocks
Berapa kali array telah dikunci tanpa membuka kunci yang sesuai.
pvData
Data.
rgsabound[1]
Satu terikat untuk setiap dimensi.
Keterangan
Array rgsabound disimpan dengan dimensi paling kiri di rgsabound[0] dan dimensi paling kanan di rgsabound[cDims - 1]
. Jika array ditentukan dalam sintaks seperti C sebagai [2][5], array akan memiliki dua elemen dalam vektor rgsabound . Elemen 0 memiliki lLbound 0 dan cElements 2. Elemen 1 memiliki lLbound 0 dan cElements 5.
Bendera fFeatures menjelaskan atribut array yang dapat memengaruhi cara array dirilis. Bidang fFeatures menjelaskan jenis data apa yang disimpan di SAFEARRAY dan bagaimana array dialokasikan. Ini memungkinkan membebaskan array tanpa mereferensikan varian yang berisi.
Keamanan Thread
Semua anggota statis publik dari jenis data SAFEARRAY aman untuk utas. Anggota instans tidak dijamin aman untuk utas.
Misalnya, pertimbangkan aplikasi yang menggunakan fungsi SafeArrayLock dan SafeArrayUnlock . Jika fungsi-fungsi ini dipanggil secara bersamaan dari utas yang berbeda pada instans jenis data SAFEARRAY yang sama, jumlah kunci yang tidak konsisten dapat dibuat. Ini pada akhirnya akan menyebabkan fungsi SafeArrayUnlock mengembalikan E_UNEXPECTED. Anda dapat mencegahnya dengan menyediakan kode sinkronisasi Anda sendiri.
Persyaratan
Persyaratan | Nilai |
---|---|
Header | oaidl.h |