How to pass optional arguments to a method on an ActiveX Control| Article ID | : | 154039 | | Last Review | : | November 21, 2006 | | Revision | : | 4.1 |
This article was previously published under Q154039 Note Microsoft Visual C++ .NET (2002) supports both the managed code
model that is provided by the Microsoft .NET Framework and the unmanaged native
Microsoft Windows code model. The information in this article applies only to
unmanaged Visual C++ code. SUMMARY Many automation methods on ActiveX Controls do not require
that all possible arguments are passed with each call. Arguments that are not
required are called optional arguments. In MFC, it is possible to add a method
to a custom control that accepts optional arguments, but there are a few rules
that must be followed. This article outlines these rules, and provides
step-by-step instruction on how to add such a method to a control.
Back to the top
MORE INFORMATION MFC's implementation of IDispatch accepts optional
arguments according to the following rules:
| 1. | Optional arguments must appear at the end of the parameter
list. If an optional argument is omitted when calling the method, all arguments
to the right of this one must also be omitted. This is similar to the C++ rules
for calling functions with Default values for parameters. | | 2. | Optional arguments must be declared as VARIANTs. If a
parameter is omitted, the calling program must pass a VARIANT initialized as:
VARIANT.vt = VT_ERROR
VARIANT.scode = DISP_E_PARAMNOTFOUND.
This will be done automatically by Visual Basic. However, in Visual C++
you must create and initialize the VARIANT yourself.NOTE: If using Visula Studio.NET do the following: | | 3. | You must edit the IDL file generated for the control and
mark the parameters as optional. This is done by adding the [optional] tag as
shown here:
[id(1)] void MyOpt([optional] VARIANT param1,
[optional] VARIANT param2);
|
To add a method that supports optional arguments, follow these
steps:
| 1. | Using ClassWizard, add a new method to the control. Be sure
to pick VARIANT as the type for each optional argument, and be sure the
optional arguments appear last in the parameter list.
NOTE: If using Visual Studio .NET do the following:
In
Class View, expand the project node to display the interface that you want to
add the method. Click Add, and then click Add Method. Pick VARIANT as the type for each optional argument, and verify
that the optional arguments appear last in the parameter list. | | 2. | Edit the ODL file, and mark these parameters with the
[optional] tag. | | 3. | Add the appropriate functionality to the method and rebuild
the control.
For example, the MyOpt method defined in ODL syntax
above could be called from Visual Basic in the following three forms:
myocx.MyOpt 2, 3 'passing both args
myocx.MyOpt 2 'omit one arg
myocx.MyOpt 'omit both args
|
Back to the top
REFERENCES
For more information, click the following article number to view the article in the Microsoft Knowledge Base:
140616 (http://support.microsoft.com/kb/140616/)
MFCDISP: Replacing MFC IDispatch implementation
For more information, see the following resources: | • | Visual C++ Books Online | | • | Programming with MFC:
Encyclopedia |
Back to the top
APPLIES TO| • | Microsoft Foundation Class Library 4.2, when used with: | | | | Microsoft Visual C++ 4.0 Standard Edition | | | | Microsoft Visual C++ 4.1 Subscription | | | | Microsoft Visual C++ 4.2 Enterprise Edition | | | | Microsoft Visual C++ 5.0 Enterprise Edition | | | | Microsoft Visual C++ 6.0 Enterprise Edition | | | | Microsoft Visual C++ 4.2 Professional Edition | | | | Microsoft Visual C++ 5.0 Professional Edition | | | | Microsoft Visual C++ 6.0 Professional Edition | | | | Microsoft Visual C++, 32-bit Learning Edition 6.0 |
| | • | Microsoft Visual C++ .NET 2002 Standard Edition | | • | Microsoft Visual C++ .NET 2003 Standard Edition |
Back to the top
| Other Support Options- Need More Help?
Contact a Support professional by Email, Online or Phone. - Customer Service
For non-technical assistance with product purchases, subscriptions, online services, events, training courses, corporate sales, piracy issues, and more. - Newsgroups
Pose a question to other users. Discussion groups and Forums about specific Microsoft products, technologies, and services.
|
|