KnowledgeBase Archive

An Archive of Early Microsoft KnowledgeBase Articles

View on GitHub

Q224185: FIX: User Defined Type in Public Function of User Control Fails

Article: Q224185
Product(s): Microsoft Visual Basic for Windows
Version(s): 6.0
Operating System(s): 
Keyword(s): kbwizard kbActiveX kbAppSetup kbCtrl kbDeployment kbVBp600bug kbGrpDSVB kbDSupport kbVS
Last Modified: 26-JUL-2001

-------------------------------------------------------------------------------
The information in this article applies to:

- Microsoft Visual Basic Learning Edition for Windows, version 6.0 
- Microsoft Visual Basic Professional Edition for Windows, version 6.0 
- Microsoft Visual Basic Enterprise Edition for Windows, version 6.0 
-------------------------------------------------------------------------------

SYMPTOMS
========

A User control has a Public User Defined Type (UDT). The User Control has a
Public function that has the UDT in the function declaration as either an
argument or the return type. When this User control is used in other Microsoft
Visual Basic projects, it does not run on any machine other than the development
machine. When deployed to other machines, the application just beeps and exits.

CAUSE
=====

The CLISID of the OCA file is being used in the executable to reference the UDT.
This is incorrect. The OCA file should only be used at design time.

RESOLUTION
==========

Define all UDTs in a separate ActiveX DLL and reference this DLL in both the
User control and the Standard EXE project. When the Standard EXE project is
distributed, the ActiveX DLL is distributed as well.

STATUS
======

Microsoft has confirmed this to be a bug in the Microsoft products listed at the
beginning of this article. This bug was corrected in the next service pack for
Visual Studio 6.0.

For additional information about Visual Studio service packs, click the article
numbers below to view the articles in the Microsoft Knowledge Base:

  Q194022 INFO: Visual Studio 6.0 Service Packs, What, Where, Why

  Q194295 HOWTO: Tell That a Visual Studio Service Pack Is Installed

You can download the latest Visual Studio service pack from the following
Microsoft Web site:

  Visual Studio Product Updates
  (http://msdn.microsoft.com/vstudio/downloads/updates.asp)

MORE INFORMATION
================

Steps to Reproduce Behavior
---------------------------

1. Create a new Visual Basic ActiveX Control project. UserControl1 is created by
  default.

2. Add the following code to the General Declarations section of UserControl1:

  Public Type UdtType
    strHello As String
  End Type

  Public Function udtFunction() As UdtType
    udtFunction.strHello = "Hello World"
  End Function

3. On the Project menu, select Project1 properties, and change the Project name
  to "udtControl" (without the quotation marks).

4. On the File menu, select Make Project1.ocx to compile the control, and then
  name it "udtControl.OCX" (without the quotation marks).

5. From the Project properties, select the Component tab, and set the Binary
  Compatibility to "udtControl.OCX" (without the quotation marks).

6. From the File menu, select Add Project, and create a new Visual Basic
  Standard EXE project. Form1 is created by default.

7. Make sure the UserControl design window is closed, and then site an instance
  of udtControl.OCX on Form1.

8. Add the following code to the General Declarations section of Form1:

  Private Sub Form_Load()
    Dim myUdt As UdtType
    myUdt = UserControl11.udtFunction
    MsgBox myUdt.strHello
  End Sub

9. From the File menu, select Make Project2.exe to compile the executable.

10. Run the Package and Deployment Wizard (PDW) to create a new Package. Install
  this Package onto another machine.

11. Run the EXE on the target machine and note that you hear a beep and the
  application terminates without displaying the form.

REFERENCES
==========

For additional information, please click the article number below to view the
article in the Microsoft Knowledge Base:

  Q237922 BUG: User Defined Type Referenced by User Control Raises "Class Not
  Registered" Error Message

Additional query words: sp4 kbfix

======================================================================
Keywords          : kbwizard kbActiveX kbAppSetup kbCtrl kbDeployment kbVBp600bug kbGrpDSVB kbDSupport kbVS600sp4fix kbVS600sp5fix 
Technology        : kbVBSearch kbAudDeveloper kbZNotKeyword6 kbZNotKeyword2 kbVB600Search kbVB600
Version           : :6.0
Issue type        : kbbug
Solution Type     : kbfix

=============================================================================

THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Copyright Microsoft Corporation 1986-2002.