IDispatch::Memanggil metode (oaidl.h)

Menyediakan akses ke properti dan metode yang diekspos oleh objek. Fungsi pengiriman DispInvoke menyediakan implementasi standar Invoke.

Sintaks

HRESULT Invoke(
  [in]      DISPID     dispIdMember,
  [in]      REFIID     riid,
  [in]      LCID       lcid,
  [in]      WORD       wFlags,
  [in, out] DISPPARAMS *pDispParams,
  [out]     VARIANT    *pVarResult,
  [out]     EXCEPINFO  *pExcepInfo,
  [out]     UINT       *puArgErr
);

Parameter

[in] dispIdMember

Mengidentifikasi anggota. Gunakan GetIDsOfNames atau dokumentasi objek untuk mendapatkan pengidentifikasi pengiriman.

[in] riid

Disiapkan untuk penggunaan masa mendatang. Pasti IID_NULL.

[in] lcid

Konteks lokal untuk menginterpretasikan argumen. lcid digunakan oleh fungsi GetIDsOfNames, dan juga diteruskan ke Invoke untuk memungkinkan objek menginterpretasikan argumennya khusus untuk lokal.

Aplikasi yang tidak mendukung beberapa bahasa nasional dapat mengabaikan parameter ini. Untuk informasi selengkapnya, lihat Mendukung Beberapa Bahasa Nasional dan Mengekspos Objek ActiveX.

[in] wFlags

Bendera yang menjelaskan konteks panggilan Panggil .

Nilai Makna
DISPATCH_METHOD
Anggota dipanggil sebagai metode. Jika properti memiliki nama yang sama, bendera ini dan bendera 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.

[in, out] pDispParams

Penunjuk ke struktur DISPPARAMS yang berisi array argumen, array DISPID argumen untuk argumen bernama, dan hitungan untuk jumlah elemen dalam array.

[out] pVarResult

Arahkan ke lokasi tempat hasil disimpan, atau NULL jika pemanggil tidak mengharapkan hasil. Argumen ini diabaikan jika DISPATCH_PROPERTYPUT atau DISPATCH_PROPERTYPUTREF ditentukan.

[out] pExcepInfo

Penunjuk ke struktur yang berisi informasi pengecualian. Struktur ini harus diisi jika DISP_E_EXCEPTION dikembalikan. Bisa NULL.

[out] 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 dikembalikan hanya ketika nilai pengembalian yang dihasilkan DISP_E_TYPEMISMATCH atau DISP_E_PARAMNOTFOUND. Argumen ini dapat diatur ke null. Untuk detailnya, lihat Mengembalikan Kesalahan.

Mengembalikan nilai

Metode ini dapat mengembalikan salah satu nilai ini.

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 dalam DISPPARAMS tidak dapat dikoercasi 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_TYPEMISMATCH
Satu atau beberapa argumen tidak dapat dipaksa. Indeks parameter pertama dengan jenis yang salah dalam rgvarg dikembalikan dalam puArgErr.
DISP_E_UNKNOWNINTERFACE

Pengidentifikasi antarmuka yang diteruskan dalam riid tidak IID_NULL.
DISP_E_UNKNOWNLCID
Anggota yang dipanggil menginterpretasikan argumen string menurut LCID, dan LCID tidak dikenali. Jika LCID tidak diperlukan untuk menginterpretasikan argumen, kesalahan ini tidak boleh dikembalikan
DISP_E_PARAMNOTOPTIONAL
Parameter yang diperlukan dihilangkan.

Keterangan

Umumnya, Anda tidak boleh menerapkan Invoke secara langsung. Sebagai gantinya, gunakan antarmuka pengiriman untuk membuat fungsi CreateStdDispatch dan DispInvoke. Untuk detailnya, lihat CreateStdDispatch, DispInvoke, Membuat Antarmuka IDispatch dan Mengekspos Objek ActiveX.

Jika beberapa pemrosesan khusus aplikasi perlu dilakukan sebelum memanggil anggota, kode harus melakukan tindakan yang diperlukan, lalu memanggil ITypeInfo::Invoke untuk memanggil anggota. ITypeInfo::Invoke bertindak persis seperti Invoke. Implementasi standar Invoke yang dibuat oleh CreateStdDispatch dan DispInvoke menunda ke ITypeInfo::Invoke.

Dalam klien ActiveX, Panggil harus digunakan untuk mendapatkan dan mengatur nilai properti, atau untuk memanggil metode objek ActiveX. Argumen dispIdMember mengidentifikasi anggota yang akan dipanggil. DISPID yang mengidentifikasi anggota ditentukan oleh pelaksana objek dan dapat ditentukan dengan menggunakan dokumentasi objek, fungsi IDispatch::GetIDsOfNames , atau antarmuka ITypeInfo .

Saat Anda menggunakan IDispatch::Invoke() dengan DISPATCH_PROPERTYPUT atau DISPATCH_PROPERTYPUTREF, Anda harus menginisialisasi elemen cNamedArgs dan rgdispidNamedArgs secara khusus dari struktur DISPPARAMS Anda dengan yang berikut:

DISPID dispidNamed = DISPID_PROPERTYPUT;
dispparams.cNamedArgs = 1;
dispparams.rgdispidNamedArgs = &dispidNamed;

Informasi yang mengikuti membahas pengembang klien ActiveX dan orang lain yang menggunakan kode untuk mengekspos objek ActiveX. Ini menjelaskan perilaku yang harus diharapkan pengguna objek yang terekspos.

Persyaratan

Persyaratan Nilai
Target Platform Windows
Header oaidl.h

Lihat juga

IDispatch