IDispatch Interface
Implemented by
| Used by
| Header filename
|
Applications
that expose
programmable objects.
| Applications
that access
programmable objects.
| OLEAUTO.H (32-bit systems)
DISPATCH.H (16-bit systems)
|
OLE Automation objects may implement the
IDispatch interface for access by OLE Automation controllers, such as Visual Basic. The
object's properties and methods can be accessed using
IDispatch::GetIDsOfNames and
IDispatch::Invoke.
The following examples show how to access an OLE Automation object through the
IDispatch interface. Note that the code is abbreviated and omits error handling.
// Declarations of variables used
DEFINE_GUID(CLSID_Hello, //...portions omitted for brevity...
HRESULT hresult;
IUnknown * punk;
IDispatch * pdisp;
OLECHAR FAR* szMember = "SayHello";
DISPID dispid;
DISPPARAMS dispparamsNoArgs = {NULL, NULL, 0, 0};
EXCEPINFO excepinfo;
UINT nArgErr;
In the following lines,
OleInitialize loads the OLE DLLs and
CoCreateInstance initializes the OLE Automation object's class factory. For more information
on these two functions, see the
OLE 2 Programmer's Reference, Volume 1.
// Initialize OLE DLLs
hresult = OleInitialize(NULL);
// OLE function CoCreateInstance starts application using GUID
hresult = CoCreateInstance(CLSID_Hello, &punk);
QueryInterface checks whether the object supports
IDispatch. (As with any call to
QueryInterface, the returned pointer must be released when it is no longer needed.)
// QueryInterface to see if it supports IDispatch.
hresult = punk->QueryInterface(IID_IDispatch, &pdisp);
GetIDsOfNames retrieves the dispatch identifier (DISPID) for the indicated method or
property, in this case, szMember.
// Retrieve the dispatch identifier for the SayHello method.
// Use defaults where possible.
hresult = pdisp->GetIDsOfNames(
IID_NULL,
&szMember,
-
LOCALE_SYSTEM_DEFAULT,
&dispid);
In the following call to
Invoke, the dispatch identifier (dispid) indicates the property or method to invoke. The
SayHello method takes no parameters, so the fifth argument (&dispparamsNoArgs
), contains NULL and 0, as initialized at declaration. To invoke a property or
method that requires parameters, you would need to supply the parameters in the
DISPPARAMS structure.
// Invoke the method. Use defaults where possible.
hresult = pdisp->Invoke(
dispid,
IID_NULL,
LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD,
&dispparamsNoArgs,
NULL,
NULL,
NULL);
- Software for developers
-
Delphi Components
.Net Components
Software for Android Developers
- More information resources
-
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
- Databases for Amazon shops developers
-
Amazon Categories Database
Browse Nodes Database