Microsoft KB Archive/178777

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

Article ID: 178777

Article Last Modified on 10/20/2003

-

APPLIES TO


 * Microsoft Visual Basic 5.0 Professional Edition
 * Microsoft Visual Basic 5.0 Enterprise Edition

-



This article was previously published under Q178777



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:

  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  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). Place this code into a class module for the project. Instead of using a collection, use the class module with this code.  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

%> </li></ol> </li></ul>

<div class="status_section">

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

<div class="moreinformation_section">

Steps to Reproduce Behavior
<ol> Create an ActiveX DLL project in Visual Basic 5.0 with Service Pack 2 or later.</li> Add a class to the project that has a method (function) with a return parameter as a collection.</li> Compile the project into a DLL.</li> 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

</li></ol>

Keywords: kbprb kbarttypeinf KB178777

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.