PRB: Passing ActiveX Control to Component Gives "Type Mismatch" Error Message (190210)
The information in this article applies to:
- Microsoft Visual Basic Learning Edition for Windows 5.0
- Microsoft Visual Basic Learning Edition for Windows 6.0
- Microsoft Visual Basic Professional Edition for Windows 5.0
- Microsoft Visual Basic Professional Edition for Windows 6.0
- Microsoft Visual Basic Enterprise Edition for Windows 5.0
- Microsoft Visual Basic Enterprise Edition for Windows 6.0
This article was previously published under Q190210 SYMPTOMS
When you pass an ActiveX control to another ActiveX component in Visual
Basic, a Type Mismatch error might occur. The problem does not occur on
your development computer, but it does occur after the control is installed
on another computer. This problem occurs even if you used the Setup Wizard
to install the .ocx and the .ocx has been properly registered.
CAUSE
ActiveX controls are private objects that belong to the form class and they
should not be passed out to external components. By design, Visual Basic
wraps each .ocx in an extended control, which provides the basic services
offered by the container to the programmer. When you pass a control object
to another component, you are in fact passing the Extender object. If your
component expects an interface pointer that is early bound as the base
control, a type mismatch error occurs because the interface IDs of the base
control and the Extender object do not match.
For example, if you pass a TreeView control as a method to another control
and attempt to set it to a variable declared as TreeView, an error occurs
when the control is executed on a non-development computer.
RESOLUTION
If possible, do not pass ActiveX controls to other components in your
project. If the component needs a specific control to function correctly,
include that control as part of the component. Microsoft does not recommend
that you pass private objects to components outside of the current project.
If you must pass ActiveX controls to your component, do not attempt to use early binding,
use late binding instead. If you pass the control as a variable of type Object, any late
bound calls to the base control will succeed since the extender is designed to forward
unrecognized property or method calls to the internal base control.
STATUS
This behavior is by design.
REFERENCES
Visual Basic Help, version 6.0; topic: Data Types Allowed in Properties and
Methods
Visual Basic 5.0 Books Online: Data Types Allowed in Properties and Methods
Modification Type: | Minor | Last Reviewed: | 3/3/2005 |
---|
Keywords: | kbprb KB190210 |
---|
|