Compatibilidad de aplicaciones que utilizan MSCOMM32.OCX en Windows Vista

Muchas de nuestras antiguas aplicaciones utilizaban el conocido control ‘mscomm32.ocx’. Atendiendo a los nuevos escenarios en ocasiones nos vemos obligados a utilizar estas aplicaciones con el nuevo sistema operativo. No existe ningún problema y estas aplicaciones funcionan perfectamente siempre y cuando utilicen los puertos serie nativos del ordenador (o sea los que vienen incluidos o incorporados a través de placas con las UART de toda la vida).


El problema ocurre cuando necesitamos utilizar alguno de los conversores USB/Serie que existen en el mercado, he descubierto que algunos de ellos tienen problemas dependiendo del driver del fabricante, pues dicho conversor trabajara adecuadamente si utilizamos el espacio de nombres System.IO.SerialPort.


Habitualmente recibiremos el siguiente error :
error ‘8020’ en tiempo de ejecucion – Error al leer el dispositivo.


Entendiendo entonces que es un problema de adaptación entre el Driver del fabricante del conversor USB/Serie el control mscomm32.ocx y Vista, en estos momentos estoy colaborando con un fabricante para ver que posibilidades tenemos de resolver el problema en este escenario.


Estaré encantado de conversar con todos los interesados en saber más de todo esto, o en espera de resolver alguna situación similar.


Saludos,
Pep Lluis,


 

29 thoughts on “Compatibilidad de aplicaciones que utilizan MSCOMM32.OCX en Windows Vista”

  1. Hola querria saber si existe alguna solucion para este problema,es que me pasa a mi con un conversor usb serie en un portatil,la marca del conversor es edgeport,espero vuestra ayuda,gracias y un saludo.

  2. Segun las conversaciones que he tenido con el equipo de desarrollo del Driver de EdgePort, es un problema de la adaptacion para Windows Vista’.

    Reporte el problema hace mas de un mes y estan trabajando en ello para solucionarlo… si te parece tan pronto como tenga noticias te aviso.

    De todas formas no olvideis que existen marcas alternativas cuyos drivers estan funcionando perfectamente en Vista, si teneis algun tema urgente.

    Saludos,
    Pep Lluis

  3. Hola y gracias por responder,no tengo prisa asi que espero a que te digan algo,de todas formas si me puedes decir otro adaptador que vaya bien en win vista lo mirare si no es muy caro y decirme donde lo puedo pillar,gracias y un saludo.

  4. Hola he probado unos genericos que se supone valen los he sacado de una pgna de confianza para el vista pero no valen para la marca que yo tengo(edgeport/1),he intentado con los de esta pagina: http://www.ftdichip.com/Drivers/D2XX.htm para vcp y para D2XX version 2.02.04 que pone que es valido para el vista pero nada,si se te ocurre algo,gracias y un saludo.

  5. Hola,pues a ver si alguien lo sabe y lo probamos,de todas formas voy a intentar buscarlo,gracias y un saludo.

  6. Existe una marca Belken que esta referenciada para trabajar en equipos con Vista.
    La referencia la podeis encontrar a traves de HP y es ‘EM449AA’. Si se trata de otro fabricante i/o portatiles, tambien teneis el PA088 de Targus.

    Espero que esto os sea util.
    Pep Lluis,

  7. Hola Pep Lluis,te han comunicado algo los de EdgePort sobre los drivers para el vista o no te han dado noticias?un saludo.

  8. Hola Orujillo,
    La ultima version testeada del driver fue el 4.36.0.0 (que no me funciona) y veo que aun esta en Beta… supongo que no tendremos la solucion hasta que puedan liberar una version de produccion. Tampoco he recibido mas noticias sobre el informe del problema.

    Saludos,
    Pep Lluis,

  9. ¿funciona este control con windows 2000 server?es que me da un error que dice: Código de excepción OLE IDispatch 0 de MSComm:, y en windows xp me funciona perfectamente.Gracias.

  10. Hola Rosana,
    Yo nunca he tenido ningun problema en usarlo. Ahora mismo no recuerdo experiencias en Win2000 Server, aunque puedo asegurarte que en un proyecto lo utilizamos masivamente en Win2000 Prof y en principio no tendria porque haver ninguna diferencia.
    En todo caso, puede que tengas un problema con el Driver del RS232 o su Adaptador… si te parece que no solucionas el problema podemos seguir esta conversacion en los foros de MSDN.
    Tienes un link en los enlaces a la derecha de esta pagina.
    Saludos,

  11. Muchas gracias Peplluis.
    Sigo sin solucionar el problema, y ya no se que probar, puse un adaptador usb-serie..entonces se me creo el COM3, pero me sigue dando error al leerlo.Una cosa es que cuando miro en administrador de dispositivos no veia ninguna informacion de los puertos, no entiendo porqué, hasta que puse lo del adaptador, y veo com3, pero no com1 y com2, no se si irá por ahi el tema.¿Algo que pueda probar?
    Muchisimas gracias y perdona que no te contestara en el foro, como me has dicho, pero no sabia en cual de ellos tenia que hacerlo.
    Saludos

  12. Rosana,

    Contacta conmigo utilizando el Link que tienes en la parte superior, en el recuadro ‘This Bloc’ opcion ‘Contact’.

    Para poder ayudarte, necesitaria que me enviaras un detalle de la aplicacion que estas utilizando con el MSCOMM32.ocx y en todo caso saber cuando y que error te da.

    No olvides darme tu direccion de correo. (de esa forma tu direccion no quedara publica).

    Espero tus noticias.

    Pep Lluis,

  13. Bueno! entiendo que finalmente esta funcionando. No dudes en contactar conmigo de nuevo para cualquier consulta al respecto.

    Saludos,

  14. Hola,yo la unica manera con la cual le hecho funcionar el edgeport/1 ha sido con win xp con el vista no hay manera,esperaremos que saquen el driver,un saludo.

  15. Hola.Hace poco contacté contigo sobre la lectura de puertos serie y el uso de mscomm32.ocx.Ahora me funciona bien.Pero me da un error que no se como solventar.Accedemos a una aplicacion varios usuarios mediante terminal server, y, por ejemplo, si un usuario entra y abre el puerto para leer, y en ese momento entra otro usuario en otro pc, tengo una instruccion que es:
    IF !ThisForm.Modem.PortOpen
    ThisForm.Modem.PortOpen = .T.
    ENDIF
    el caso es que me da error, al abrirlo esta segunda vez, Código de excepción OLE IDispatch 0 de MSComm: Port already
    open.
    Si esta ya abierto no tendria que pasar por esta instrucción, y como pasa e intenta abrirlo es cuando da el error.
    No se si me he explicado.Muchas gracias.

  16. Hola Rosana,
    Pues en ese sentido lo tenemos mal. Solo una aplicacion puede abrir un puerto serie. En todo caso si necesitas compartir la información adquirida por el puerto serie, deberas montar un pequeño servidor, de manera que varios clientes puedan acceder simultaneamente a esos datos.
    En el mercado tambien tenemos modulos Ethernet/Serie que son funcionalmente servidores y permiten compartir puertos serie con diversos clientes… pero valen su dinero.
    Si te parece que necesitas mas informacion contacta conmigo a traves de ‘Contacto’ en la pagina inicial y continuamos esta conversacion en off.
    Saludos,

  17. hola todos!!
    disculpen la intromision, pero yo tengo un problema similar, salvo que no us adaptador USB a Serial.
    yo intento usar un celular GSM Motorola que se conecta por usb. al modem me lo muestra como si fuera un dispositivo serie con un COM asociado.
    si envio comandos AT+ por terminal el celular responde ok. pero no puedo hacer que funcione en VB (aclaro que uso VB6)
    alguien pudo resolver el problema?
    hay algun mscomm mas actual?
    gracias

  18. Hola,
    Creo que estamos hablando de lo mismo. En tu caso el propio dispositivo se conecta a traves de USB y es el fabricante quien suministra el Driver… pero tal driver tiene el problema de no trabajar bien la combinacion MSCOMM32 y Vista, pues es incapaz de recibir caracters. La unica solucion es desarrollarlo usando System.IO.Ports con Visual Studio 2005. (No olvides que puedes descargarte la version express).
    Suerte,
    Pep Lluis,

  19. Asi es! a fecha de hoy… Abril 2008, el driver de algunos fabricantes no funciona si tu programa esta usando la combinacion MSCOMM32.OCX en Vista, no ocurre lo mismo si utilizas System.IO.Ports con el que seguramente podras trabajar sin problemas.

    PD. No he podido probar si el problema queda resuelto aplicando el SP1 de Vista…

  20. COMO INSTALO O HABILITO System.IO.Ports Y PARA UN PROYECTO PERO NO PUEDO HACER QUE SE COMUNIQUE, GRACIAS

  21. Hola Jonathan,
    System.IO.Ports, esta en el Framework 2.0, por lo tanto disponible para programar utilizando la version de lenguajes de Visual Studio 2005 y posteriores.

    Saludos,

  22. Tengo problemas en Vista con un sistema programado en VB6 y que usa el MSCOMM32.

    Es importante aclarar que lo mas comun es que este sistema funcione con USB-COM debido a que las PCs/Notebooks nuevas estan viniendo sin puertos COM.

    Este sistemita autodetecta la conexion de un equipo conectado al puerto COM de la PC. En XP anda bien, pero en Vista supuestamente detecta un equipo conectado aunque la PC (notebook) ni siquiera tiene puerto COM :S

    Al parecer tengo problemas en toda la capa que utiliza el control. Ya que no se generan errores de ningun tipo (los cuales deberian ser capturados) y funciona muy mal.

    Aca agrego algunas de las rutinas que uso. Estoy tratando de migrar a VB2005 para resolver los problemas de esta capa de comunicación (el costo es alto debido a que cambiaron muchas cosas en el resto de los controles comunes).
    Si tienen algun comentario de las mismas me seria util.

    Desde ya muchas gracias.

    Public Function ConnectCom(ByRef myCom As AxMSCommLib.AxMSComm, ByRef strBps As String) As Boolean
    On Error GoTo manejarError
    Dim portnumber As Short
    portnumber = myCom.CommPort
    If (portnumber <> 0) And CheckPortCom(myCom, portnumber) Then
    With myCom
    .Settings = strBps & “,N,8,1″
    .InputLen = 0
    .PortOpen = True
    .Handshaking = MSCommLib.HandshakeConstants.comNone
    .RTSEnable = true
    End With
    ConnectCom = True
    Else
    ConnectCom = False

    End If
    Exit Function

    manejarError:
    If Err.Number = 8005 Then

    ConnectCom = False
    End If
    End Function

    Public Function DisconnectCom(ByRef myCom As AxMSCommLib.AxMSComm) As Boolean
    On Error Resume Next
    myCom.PortOpen = False
    If Err.Number = 0 Then
    DisconnectCom = True
    Else
    DisconnectCom = False
    End If
    End Function

    Public Function CheckPortCom(ByRef myCom As AxMSCommLib.AxMSComm, ByRef intPortNumber As Short) As Boolean
    On Error GoTo manejarError
    CheckPortCom = True

    If isPortComOpen(myCom) Then
    Call DisconnectCom(myCom)
    End If
    With myCom
    .CommPort = intPortNumber
    .PortOpen = True
    .PortOpen = False
    End With

    Exit Function

    manejarError:
    If Err.Number = 8002 Then
    CheckPortCom = False
    End If
    End Function

    PD: Desde ya muchas gracias

  23. Hola! Héctor Gastaminza,
    En el caso de los conversores USB-RS232, el uso de MSCOMM32.ocx y programas hechos en Visual Basic 6, no entrañan dificultad o incompatibilidad de ejecucion. Lo mas habitual es que el adaptador “driver” suministrado por el fabricante no este funcionando o no este diseñado para funcionar en Vista. Despues de estudiar algunos casos, he podido verificar que programas que utilizan MSCOMM32 funcionan perfectamente con adaptadores concretos. Por ejemplo TARGUS PA088 funciona! sin embargo el driver de EdgePort no. Pero en todos los casos funciona si el puerto esta incorporado en la electronica del PC.
    Si requieres continuar la conversacion, puedes contactar conmigo desde [This Blog] [Contact]
    Saludos,
    Pep Lluis,

  24. Tengo el mismo problema. La marca de mi conversor USB-Serie es omega. Existe alguna solución para esta marca? Muchas gracias

  25. Hola Marco,

    Pues desconozco si existe solucion para esta marca, pero tal como puedes leer en el comentario anterior Targus dispone de un adaptador con una version 3.0 de su driver que si funciona en Vista.

    Saludos,

    PepLluis,

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>