FIX: OutOfMemoryException Occurs When You Access Non-Fixed Size Safe Arrays in a User-Defined Type

This article has been archived. It is offered "as is" and will no longer be updated.
The following error message occurs when you invoke a method on a Component Object Model (COM) object that returns a user-defined type that contains a Safe array (non-fixed size):
An unhandled exception of type 'System.OutOfMemoryException' occurred in ApplicationName.exe

Additional information: Not enough storage is available to complete this operation.
This behavior occurs because the .NET Framework cannot marshal a structure field with a Safe array (non-fixed size) type.
This bug was corrected in .NET Framework (2003|1.1).
More information

Steps to Reproduce the Behavior

  1. Create an ActiveX DLL project in Microsoft Visual Basic 6.0. Paste the following code in the default class module, Class1 (Class1.cls):
    Public Type Test    l As Long    x() As IntegerEnd TypePublic Function Func() As Test    Dim t As Test    t.l = 100    Func = tEnd Function					
  2. Make Project1.dll.
  3. Open Microsoft Visual Studio. NET and then create a Windows Application project in Visual Basic .NET.
  4. Add a reference to Project1.dll.
  5. Add a Button control to Form1.
  6. Copy and then paste the following code after the Windows Form Designer generated code region:
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click        Dim c As New Project1.Class1()        c.Func()    End Sub					
  7. Compile and then run the application. Click the button.
For more information about interop marshaling, visit the following Microsoft Web site:
array UDT OutOfMemoryException

Article ID: 327107 - Last Review: 01/17/2015 05:55:12 - Revision: 3.0

Microsoft .NET Framework 1.1, Microsoft .NET Framework 1.0

  • kbnosurvey kbarchive kbfix kbbug kbcominterop kbpending KB327107