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
FADF_AUTO
0x0001
Array yang dialokasikan pada tumpukan.
FADF_STATIC
0x0002
Array yang dialokasikan secara statis.
FADF_EMBEDDED
0x0004
Array yang disematkan dalam struktur.
FADF_FIXEDSIZE
0x0010
Array yang mungkin tidak diubah ukurannya atau direalokasikan.
FADF_RECORD
0x0020
Array yang berisi rekaman. Ketika diatur, akan ada penunjuk ke antarmuka IRecordInfo pada offset negatif 4 dalam deskriptor array.
FADF_HAVEIID
0x0040
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.
FADF_HAVEVARTYPE
0x0080
Array yang memiliki jenis varian. Jenis varian dapat diambil dengan SafeArrayGetVartype.
FADF_BSTR
0x0100
Array BSTR.
FADF_UNKNOWN
0x0200
An array of IUnknown*.
FADF_DISPATCH
0x0400
An array of IDispatch*.
FADF_VARIANT
0x0800
Array VARIAN.
FADF_RESERVED
0xF008
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