PRB: ASP Returns "Error in Loading DLL" with VB Component

Last reviewed: January 5, 1998
Article ID: Q178777
The information in this article applies to:
  • Microsoft Visual Studio versions 97sp2, 97sp3

SYMPTOMS

When using Visual Studio Service Pack 2 or 3, a problem may occur when you try to work with objects that have been assigned as Visual Basic collections. When you try to access any of the functions of the collection (such as count, add, or remove), or use the For...Each...Next enumerations, the following Visual Basic Script error appears:

   Microsoft VBScript runtime error '800a0030' Error in loading DLL

CAUSE

We are researching this bug and will post new information here in the Microsoft Knowledge Base as it becomes available.

RESOLUTION

There are two possible solutions to this problem:

  • Revert back to a previous version of Visual Basic 5.0 (prior to Service Pack 2).

-or-
  • Implement a class wrapper around the collection object of Visual Basic. To implement a class wrapper around the collection object, follow these steps:

  1. Add the following code to a class module in Visual Basic:

          Option Explicit
          Private m_cList As Collection
    

          'Add
    
          'Purpose     - Add to list
          'Inputs      - (String)  sKey
          '            - (Variant) vItem
          Public Sub Add(ByVal sKey As String, vItem As Variant)
            m_cList.Add vItem, sKey
          End Sub
    
          'Remove
          'Purpose     - Remove from list
          'Inputs      - (String)  sKey
          Public Sub Remove(sKey As String)
            m_cList.Remove sKey
          End Sub
    
          Public Property Get Count() As Long
            Count = m_cList.Count
          End Property
    
          Public Property Get Item(sKey As String) As Variant
            On Error Resume Next
            If m_cList.Count > 0 Then
              If IsObject(m_cList(sKey)) Then
                Set Item = m_cList(sKey)
              Else
                Item = m_cList(sKey)
              End If
            End If
          End Property
    
          Public Property Get NewEnum() As IUnknown
            On Error Resume Next
            Set NewEnum = m_cList.[_NewEnum]
          End Property
    
          Private Sub Class_Initialize()
            On Error Resume Next
            Set m_cList = New Collection
          End Sub
    
          Private Sub Class_Terminate()
            On Error Resume Next
            Set m_cList = Nothing
          End Sub
    
    

  2. In Visual Basic, under the Tools menu, click Procedure Attributes, click Advanced, and select the Item methods Procedure ID as default and select the NewEnum procedure Id as -4 (you will need to type this in manually).

  3. Place this code into a class module for the project. Instead of using a collection, use the class module with this code.

  4. To test this new object, create a test Active Server Page with the following code:

    <%

          'Create an instance of the new collection object
          Set objMyColl = Server.CreateObject("Project1.Class1")
    

          If IsObject(objMyColl) Then
    
             Response.Write "Yes, I am an object" & "<BR><BR>"
    
             'Add some test members
             objMyColl.Add CStr("1"), "Apple"
             objMyColl.Add CStr("2"), "Orange"
             objMyColl.Add CStr("3"), "Banana"
    
             'Get the count of the members
          Response.Write "I have " & objMyColl.Count & " members" & "<BR><BR>"
    
              Response.Write "The members are: " & "<BR>"
              For Each Item in objMyColl
                Response.Write item & "<BR>"
              Next
           Else
              Response.Write "Server failed to create object."
           End if
    
       %>
    
    

STATUS

Microsoft is researching this problem and will post new information here in the Microsoft Knowledge Base as it becomes available.

MORE INFORMATION

Steps to Reproduce Behavior

  1. Create an ActiveX DLL project in Visual Basic 5.0 with Service Pack 2 or later.

  2. Add a class to the project that has a method (function) with a return parameter as a collection.

  3. Compile the project into a DLL.

  4. Create an Active Server Page that creates an instance of the object and accesses any methods of the object or tries to enumerate the collection. The Active Server Page returns the following error:

          Microsoft VBScript runtime error '800a0030' Error in Loading DLL
    
Keywords          : VSGenIss
Version           : WINDOWS:97sp2,97sp3
Platform          : WINDOWS
Issue type        : kbprb


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


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.

Last reviewed: January 5, 1998
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.