Bagikan melalui


Fungsi SafeArrayCreateEx (oleauto.h)

Membuat dan mengembalikan deskriptor array aman dari VARTYPE, jumlah dimensi, dan batas yang ditentukan.

Sintaks

SAFEARRAY * SafeArrayCreateEx(
  [in] VARTYPE        vt,
  [in] UINT           cDims,
  [in] SAFEARRAYBOUND *rgsabound,
  [in] PVOID          pvExtra
);

Parameter

[in] vt

Jenis dasar atau VARTYPE dari setiap elemen array. Bendera FADF_RECORD dapat diatur untuk jenis varian VT_RECORD, Bendera FADF_HAVEIID dapat diatur untuk VT_DISPATCH atau VT_UNKNOWN, dan FADF_HAVEVARTYPE dapat diatur untuk semua VARTYPI lainnya.

[in] cDims

Jumlah dimensi dalam array.

[in] rgsabound

Vektor batas (satu untuk setiap dimensi) untuk mengalokasikan array.

[in] pvExtra

informasi jenis jenis yang ditentukan pengguna, jika Anda membuat array aman dari jenis yang ditentukan pengguna. Jika parameter vt VT_RECORD, maka pvExtra akan menjadi penunjuk ke IRecordInfo yang menjelaskan rekaman. Jika parameter vt VT_DISPATCH atau VT_UNKNOWN, maka pvExtra akan berisi pointer ke GUID yang mewakili jenis antarmuka yang diteruskan ke array.

Nilai kembali

Deskriptor array aman, atau null jika array tidak dapat dibuat.

Keterangan

Jika VARTYPE VT_RECORD maka SafeArraySetRecordInfo dipanggil. Jika VARTYPE VT_DISPATCH atau VT_UNKNOWN maka elemen array harus berisi antarmuka dengan jenis yang sama. Bagian dari proses marshaling array ini ke proses lain memang termasuk menghasilkan kode proksi/stub IID yang diarahkan oleh parameter pvExtra . Untuk benar-benar melewati antarmuka heterogen, seseorang perlu menentukan IID_IUnknown atau IID_IDispatch di pvExtra dan menyediakan beberapa cara lain bagi pemanggil untuk mengidentifikasi cara mengkueri antarmuka yang sebenarnya.

Contoh

Contoh berikut menjelaskan bagaimana array aman dari jenis yang ditentukan pengguna disimpan ke dalam varian jenis VT_RECORD.

SAFEARRAYBOUND * sab;
sab.cElements = 2;
sab.lLbound = 0;
hresult hr;

SAFEARRAY Sa;
Sa = SafeArrayCreateEx(VT_RECORD, 1, &sab, pRecInfo);
if (Sa == NULL)
   return E_OUTOFMEMORY;

PVOID pvData;
hr = SafeArrayAccessData(Sa, &pvData);
if (FAILED(hr)) {
   SafeArrayDestroy(Sa);
   return hr;
}

TEST * pTest;
pTest = (TEST *)pvData;
pTest[0] = a;
pTest[1] = b;
hr = SafeArrayUnaccessData(Sa);
if (FAILED(hr)) {
   SafeArrayDestroy(Sa);
   return hr;
}

VariantInit(&variant);
V_VT(&variant) = VT_ARRAY|VT_RECORD;
V_ARRAY(&variant) = Sa;

Persyaratan

Persyaratan Nilai
Target Platform Windows
Header oleauto.h
Pustaka OleAut32.lib
DLL OleAut32.dll