REVISIÓN: Para...Cada bucle en componente ActiveX produce errores

Seleccione idioma Seleccione idioma
Id. de artículo: 183164 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

En esta página

Síntomas

Cuando utilizando una DLL de ActiveX creado en Visual Basic, puede recibir uno de los siguientes errores si el componente ActiveX contiene for...Cada bucle que recorre en iteración una colección de Visual Basic:
Error en tiempo de ejecución '48':
Error al cargar DLL
-o bien -
Error en tiempo de ejecución '-2147319765 (8002802b)':
Error de automatización

Este problema se produce cuando for..Cada bucle se ejecuta en un archivo DLL de ActiveX. Para...Cada bucles en otro lugar no presentan este problema.

Causa

Este problema normalmente se produce después de llamar a la DLL de al menos dos veces. La primera llamada en el archivo DLL no ejecuta código que utiliza un para...Cada bucle pero la segunda llamada lo hace. El error se produce durante la segunda llamada. Consulte la sección "Pasos para reproducir el comportamiento" a continuación para obtener más información.

Solución

  • Utilice un para...Siguiente bucle en lugar de for...Cada bucle.

    -o bien -
  • Cree su propia clase de colección un ejemplo de la que puede encontrarse en Visual Basic Books Online. Consulte el tema "Crear sus propias clases de colección".

    -o bien -
  • Si el archivo DLL se ejecuta en un entorno multiproceso, como Internet Information Server (IIS) o Microsoft Transaction Server (MTS), por favor, consulte el siguiente artículo en Microsoft Knowledge Base:

    186273Error: Va ejecutar componentes integrados de VB en el entorno de multiproceso

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:" de este artículo. Este problema se ha corregido en Microsoft Visual Basic 6.0.

Nota: Si el archivo DLL se está ejecutando en un entorno multiproceso, todavía debe completar los pasos proporcionados en el siguiente artículo en Microsoft Knowledge Base:

186273Error: Va ejecutar componentes integrados de VB en el entorno de multiproceso

Más información

Pasos para reproducir este comportamiento

  1. Crear un nuevo proyecto DLL ActiveX en Visual Basic.
  2. Haga clic en Propiedades de Project1 en el menú proyecto y establezca el nombre de proyecto a "AutoErr1."
  3. Copie el código siguiente al módulo de Class1:
          Public Sub Method1()
             Dim col As New Collection
             Dim obj As Object
             For Each obj In col
             Next obj
          End Sub
    
    						
  4. Haga clic en "Crear AutoErr1.dll" en el menú archivo para crear el archivo DLL.
  5. Salga de Visual Basic. Opcionalmente, puede guardar los archivos de proyecto.
  6. Inicie Microsoft Excel 97 y cree un nuevo libro. Presione las teclas ALT+F11 teclas para iniciar el editor de Visual Basic.
  7. Haga clic en módulo en el menú Insertar para agregar un módulo estándar. Agregue el código siguiente al nuevo módulo:
          Private Sub Test48()
             ' First call into dll
             Dim o as Object
             Set o = CreateObject("AutoErr1.Class1")
             Set o = Nothing
             ' Second call into dll
             Set o = CreateObject("AutoErr1.Class1")
             o.Method1 ' calls method that uses For..Each loop
             set o = Nothing
          End Sub
    
    						
  8. Presione la tecla F8 para recorrer el código de Sub y observe que el siguiente error se produce al llamar a Method1:
    Error en tiempo de ejecución '48':
    Error al cargar DLL
Los pasos siguientes muestran cómo reproducir el error de automatización mediante Visual Basic como el cliente. Tenga en cuenta que estos pasos no pueden reproducir el error en algunos equipos.

  1. Siga los pasos 1 a 5 anteriores para crear el AutoErr1.dll.
  2. Inicie un nuevo proyecto EXE estándar en Visual Basic. Se creará Form1 de manera predeterminada.
  3. Coloque dos botones de comando (Command1 y Command2) en Form1.
  4. Copie el código siguiente al módulo de Form1:
          Private Sub Command1_Click()
             ' First call into dll
             Dim o As Object
             Set o = CreateObject("AutoErr1.Class1")
             Set o = Nothing
          End Sub
    
          Private Sub Command2_Click()
             ' Second call into dll
             Dim o As Object
             Set o = CreateObject("AutoErr1.Class1")
             o.Method1
             Set o = Nothing
          End Sub
    
    						
  5. Presione las teclas CTRL + F5 para ejecutar el proyecto.
  6. Haga clic en Command1.
  7. Haga clic en Command2. Observe que el siguiente error puede producirse al llamar a Method1:
    Error en tiempo de ejecución '-2147319765 (8002802b)':
    Error de automatización

Referencias

Para obtener información adicional, consulte en contacto con el siguiente artículo en Microsoft Knowledge Base:
178777: PRB: ASP devuelve "Error en carga la DLL" con componente de VB

Propiedades

Id. de artículo: 183164 - Última revisión: jueves, 23 de enero de 2014 - Versión: 2.0
La información de este artículo se refiere a:
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
Palabras clave: 
kbnosurvey kbarchive kbmt kbbug kberrmsg kbfix kbvbp600fix KB183164 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 183164

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com