PRB: Error de automatización (-2147417843) cuando utiliza el área de notificación de la barra de tareas

Seleccione idioma Seleccione idioma
Id. de artículo: 190523 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Síntomas

Cuando se utiliza la función Shell_NotifyIcon o en el ejemplo de control SysTray desde el CD de Visual Basic, puede recibir el siguiente mensaje de error:
Error en tiempo de ejecución:-2147417843 (8001010d)
Error de automatización

Causa

El error de tiempo de ejecución se produce porque esté intentando hacer una llamada de automatización a un fuera de proceso (ActiveX) EXE desde dentro de la notificación de evento de devolución de llamada de barra de tareas área de notificación. El valor-2147417843 se traduce en el siguiente mensaje de error:
No se puede hacer una llamada de salida desde la aplicación que está ejecutando una llamada sincrónica de entrada.
Los clientes de automatización son necesarios para COM para procesar llamadas sincrónicas de entrada sin interrupción y no, por lo tanto, pueden realizar llamadas salientes de automatización al procesar esos mensajes.

Solución

Evite realizar llamadas salientes de automatización durante la devolución de llamada barra de tareas área de notificación. Si una automatización necesario método se llama en respuesta a un evento de usuario que implican el área de notificación de la barra de tareas, utilice un temporizador sencillo para exponer usted mismo un mensaje y, a continuación, deje que se complete la función de devolución de llamada. Cuando se desencadene el evento Timer, se puede llamar con seguridad a su método de automatización.

Estado

Este comportamiento es por diseño.

Más información

Pasos para reproducir este comportamiento

  1. Copiar el ejemplo de control de SysTray desde la carpeta Tools\Unsupprt del CD-ROM de Visual Basic 5.0 o la carpeta Common\Tools\VB\Unsupprt del CD-ROM de Visual Basic 6.0, en el disco duro.
  2. Abra el proyecto y compile el control. Cuando haya finalizado, cierre el proyecto.
  3. Cree un nuevo proyecto EXE estándar. Se creará Form1 de manera predeterminada.
  4. En el menú proyecto , haga clic en componentes y comprobar icono de Bandeja de sistema control . Haga clic en Aceptar .
  5. Seleccione el control de SysTray en el cuadro de herramientas y agregue una instancia a Form1.
  6. Agregue el código siguiente en ventana de código de Form1:
    Option Explicit
    Private oWord As Object
    
    Private Sub Form_Load()
       Set oWord = CreateObject("Word.Application")
       Set cSysTray1.TrayIcon = Me.Icon
       cSysTray1.InTray = True
    End Sub
    
    Private Sub Form_Unload(Cancel As Integer)
       cSysTray1.InTray = False
       Set oWord = Nothing
    End Sub
    
    Private Sub cSysTray1_MouseDblClick(Button As Integer, Id As Long)
       oWord.Visible = True
    End Sub
  7. Ejecute la aplicación presionando la tecla F5. El error se produce al hacer doble clic en icono de la aplicación en la bandeja del sistema. Presione la tecla fin para detener al depurador.
  8. Para evitar el error, agregue un componente Timer a Form1.
  9. Reemplace el código de Form1 con lo siguiente:
    Option Explicit
    Private oWord As Object
    
    Private Sub Form_Load()
       Set oWord = CreateObject("Word.Application")
       Set cSysTray1.TrayIcon = Me.Icon
       cSysTray1.InTray = True
       Timer1.Enabled = False
       Timer1.Interval = 10
    End Sub
    
    Private Sub Form_Unload(Cancel As Integer)
       cSysTray1.InTray = False
       Set oWord = Nothing
    End Sub
    
    Private Sub cSysTray1_MouseDblClick(Button As Integer, Id As Long)
       Timer1.Enabled = True
    End Sub
    
    Private Sub Timer1_Timer()
       Timer1.Enabled = False
       oWord.Visible = True
    End Sub
    					
  10. Vuelva a ejecutar la aplicación presionando la tecla F5. Este tiempo puede aparecer ningún error.

Referencias

Para obtener información adicional sobre las llamadas sincrónicas de entrada en COM y este error de automatización, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
131056PRB: Error de llamada OLE de sincronización en SendMessage entre Process/Thread
Para obtener información adicional, consulte en contacto con el siguiente artículo en Microsoft Knowledge Base:
176085Cómo: Utilizar el área de notificación de barra de tareas directamente desde Visual Basic 5.0

Propiedades

Id. de artículo: 190523 - Última revisión: lunes, 12 de mayo de 2003 - Versión: 2.0
La información de este artículo se refiere a:
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Edición de aprendizaje
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
Palabras clave: 
kbmt kbautomation kbprb kbprogramming KB190523 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): 190523

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