|
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);
Related LinksSoftware for Delphi and C++ Builder developers Software for Visual Studio .NET developers Software for Visual Basic 6 developers Delphi Tips&Tricks MegaDetailed.NET More Online Helps Win32 Programmer's Reference (win32.hlp) Win32 Multimedia Programmer's Reference (mmedia.hlp) Microsoft Windows Pen API Programmer's Reference (penapi.hlp) Microsoft Windows Sockets 2 Reference (sock2.hlp) Microsoft Windows Telephony API (TAPI) Programmer's Reference (sock2.hlp) Unix Manual Pages
|