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 .

Nilai Makna
DISPATCH_METHOD
Anggota dipanggil sebagai metode. Jika properti memiliki nama yang sama, bendera ini dan DISPATCH_PROPERTYGET dapat diatur.
DISPATCH_PROPERTYGET
Anggota diambil sebagai properti atau anggota data.
DISPATCH_PROPERTYPUT
Anggota diubah sebagai properti atau anggota data.
DISPATCH_PROPERTYPUTREF
Anggota diubah oleh penetapan referensi, bukan penetapan nilai. Bendera ini hanya valid ketika properti menerima referensi ke objek.

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
S_OK
Berhasil.
DISP_E_BADPARAMCOUNT
Jumlah elemen yang disediakan untuk DISPPARAMS berbeda dari jumlah argumen yang diterima oleh metode atau properti .
DISP_E_BADVARTYPE
Salah satu argumen dalam DISPPARAMS bukan jenis varian yang valid.
DISP_E_EXCEPTION
Aplikasi perlu menaikkan pengecualian. Dalam hal ini, struktur yang diteruskan dalam pexcepinfo harus diisi.
DISP_E_MEMBERNOTFOUND
Anggota yang diminta tidak ada.
DISP_E_NONAMEDARGS
Implementasi IDispatch ini tidak mendukung argumen bernama.
DISP_E_OVERFLOW
Salah satu argumen di DISPPARAMS tidak dapat dipaksa ke jenis yang ditentukan.
DISP_E_PARAMNOTFOUND
Salah satu ID parameter tidak sesuai dengan parameter pada metode . Dalam hal ini, puArgErr diatur ke argumen pertama yang berisi kesalahan.
DISP_E_PARAMNOTOPTIONAL
Parameter yang diperlukan dihilangkan.
DISP_E_TYPEMISMATCH
Satu atau beberapa argumen tidak dapat dipaksa. Indeks parameter pertama dengan jenis yang salah dalam rgvarg dikembalikan dalam puArgErr.
E_INVALIDARG
Salah satu parameter tidak valid.
E_OUTOFMEMORY
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

Lihat juga

CreateStdDispatch

Pembuatan Fungsi API Pengiriman

IDispatch

IDispatch::Invoke

ITypeInfo::Invoke