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 |
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk