Fungsi DispInvoke (oleauto.h)
Secara otomatis memanggil fungsi anggota pada antarmuka, mengingat informasi jenis untuk antarmuka. Anda dapat menjelaskan antarmuka dengan informasi jenis dan menerapkan Invoke untuk antarmuka menggunakan panggilan tunggal ini.
Sintaks
HRESULT DispInvoke(
void *_this,
ITypeInfo *ptinfo,
DISPID dispidMember,
WORD wFlags,
DISPPARAMS *pparams,
VARIANT *pvarResult,
EXCEPINFO *pexcepinfo,
UINT *puArgErr
);
Parameter
_this
Implementasi antarmuka IDispatch yang dijelaskan oleh ptinfo.
ptinfo
Informasi jenis yang menjelaskan antarmuka.
dispidMember
Anggota yang akan dipanggil. Gunakan GetIDsOfNames atau dokumentasi objek untuk mendapatkan DISPID.
wFlags
Bendera yang menjelaskan konteks panggilan Panggil .
pparams
Penunjuk ke struktur yang berisi array argumen, array DISPID argumen untuk argumen bernama, dan hitungan untuk jumlah elemen dalam array.
pvarResult
Arahkan ke tempat hasil akan disimpan, atau Null jika pemanggil tidak mengharapkan hasil. Argumen ini diabaikan jika DISPATCH_PROPERTYPUT atau DISPATCH_PROPERTYPUTREF ditentukan.
pexcepinfo
Penunjuk ke struktur yang berisi informasi pengecualian. Struktur ini harus diisi jika DISP_E_EXCEPTION dikembalikan.
puArgErr
Indeks dalam rgvarg dari argumen pertama yang memiliki kesalahan. Argumen disimpan dalam pdispparams-rgvarg> dalam urutan terbalik, sehingga argumen pertama adalah argumen dengan indeks tertinggi dalam array. Parameter ini hanya dikembalikan ketika nilai pengembalian yang dihasilkan DISP_E_TYPEMISMATCH atau DISP_E_PARAMNOTFOUND.
Nilai kembali
Menampilkan kode | Deskripsi |
---|---|
|
Berhasil. |
|
Jumlah elemen yang disediakan untuk DISPPARAMS berbeda dari jumlah argumen yang diterima oleh metode atau properti . |
|
Salah satu argumen dalam DISPPARAMS bukan jenis varian yang valid. |
|
Aplikasi perlu menaikkan pengecualian. Dalam hal ini, struktur yang diteruskan dalam pexcepinfo harus diisi. |
|
Anggota yang diminta tidak ada. |
|
Implementasi IDispatch ini tidak mendukung argumen bernama. |
|
Salah satu argumen di DISPPARAMS tidak dapat dipaksa ke jenis yang ditentukan. |
|
Salah satu ID parameter tidak sesuai dengan parameter pada metode . Dalam hal ini, puArgErr diatur ke argumen pertama yang berisi kesalahan. |
|
Parameter yang diperlukan dihilangkan. |
|
Satu atau beberapa argumen tidak dapat dipaksa. Indeks parameter pertama dengan jenis yang salah dalam rgvarg dikembalikan dalam puArgErr. |
|
Salah satu parameter tidak valid. |
|
Tidak cukup memori untuk menyelesaikan operasi. |
Salah satu kesalahan ITypeInfo::Invoke juga dapat dikembalikan.
Keterangan
Parameter _this adalah penunjuk ke implementasi antarmuka yang sedang ditangguhkan. DispInvoke membangun bingkai tumpukan, memaksa parameter menggunakan aturan pemaksaan standar, mendorongnya pada tumpukan, lalu memanggil fungsi anggota yang benar di VTBL.
Contoh
Kode berikut dari file sampel Baris Lines.cpp mengimplementasikan Invoke menggunakan DispInvoke. Implementasi ini bergantung pada DispInvoke untuk memvalidasi argumen input. Untuk membantu meminimalkan risiko keamanan, sertakan kode yang melakukan validasi argumen input yang lebih kuat.
STDMETHODIMP
CLines::Invoke(
DISPID dispidMember,
REFIID riid,
LCID lcid,
WORD wFlags,
DISPPARAMS * pdispparams,
VARIANT * pvarResult,
EXCEPINFO* pexcepinfo,
UINT * puArgErr)
{
return DispInvoke(
this, m_ptinfo,
dispidMember, wFlags, pdispparams,
pvarResult, pexcepinfo, puArgErr);
}
Persyaratan
Persyaratan | Nilai |
---|---|
Target Platform | Windows |
Header | oleauto.h |
Pustaka | OleAut32.lib |
DLL | OleAut32.dll |