Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Tokes en 23 Agosto 2010, 17:01 pm



Título: Pequeño problema en Visual Basic 6.0
Publicado por: Tokes en 23 Agosto 2010, 17:01 pm
Hola a toda la gente del foro:

Tengo un pequeño problema en Visual Basic 6. Verán: Estoy haciendo un sistema de adquisición de datos con un microcontrolador ATMEGA16, el cual se conecta a una PC mediante el puerto serie RS232. La interfaz de la PC la hice en Visual Basic 6.0, utilizando el control MSComm.

Al ejecutar el programa en el IDE todo funciona correctamente. Si lo compilo y ejecuto el archivo .EXE todo funciona correctamente. El problema viene cuando trato de ejecutar el archivo .EXE en una computadora que no tiene instalado Visual Basic (repito, el archivo .EXE, el compilado). Si trato de ejecutarlo me manda un mensaje de error, especificando que no se reconoce el componente MSComm1.

En este caso ¿Es forzoso que la PC deba tener instalado Visual Basic para que el programa se ejecute? ¿O sólo hay que instalar algún driver o algo así?


                     Gracias por su atención.

PD: Les informo que el problema lo solucioné instalando Visual Basic en la PC. Pero sería fastidioso instalar Visual Basic en cada una de las computadoras donde se tenga que ejecutar el programa. Por eso quisiera saber si hay alguna otra manera.


Título: Re: Pequeño problema en Visual Basic 6.0
Publicado por: 79137913 en 23 Agosto 2010, 17:33 pm
HOLA!!!

Creo que tu problema es que tenes que instalar las dependecias (los dll y ocx) de tu exe en el otro PC

los pones en system32 y los registras

Listo!

GRACIAS POR LEER!!!


Título: Re: Pequeño problema en Visual Basic 6.0
Publicado por: Tokes en 23 Agosto 2010, 18:35 pm
Buen día mi cuate:

¿Sabes si hay alguna API para copiar un archivo de un lugar a otro de la PC?
Es decir, para que la misma aplicación instale las dll.

           Gracias.


Título: Re: Pequeño problema en Visual Basic 6.0
Publicado por: BlackZeroX en 23 Agosto 2010, 19:34 pm
puertos serie aqui tienes un Modulo de Clase para quitarte dependencias!¡.

Ojala te sirva

http://www.leandroascierto.com.ar/foro/index.php?topic=345.0

Dulces Lunas!¡.


Título: Re: Pequeño problema en Visual Basic 6.0
Publicado por: Tokes en 24 Agosto 2010, 02:26 am
Hola de nuevo:

Quiero agradecerle por contestar a mi pregunta; me sirvieron mucho sus respuestas. Saben, decidí hacer lo siguiente:

Cargar las ocx del mscomm en una carpeta junto con el programa que voy a instalar (dicho programa las requerirá, ya que usará el puerto serie RS232). También en la misma carpeta guardé un programa que hice en Visual Basic y que nombré "Instalador.exe". Ese programa realiza lo siguiente:

 - Examina "C:\WINDOWS\system32\" en busca de los archivos "MSCOMM32.ocx" y "COMDLG32.ocx". En caso de no encontrarlos, los copia (por eso el instalador, los ocx y el programa que ha de instalarse deben estar en la misma carpeta).

 - Copia en el disco C el programa que ha de instalarse (que en mi caso se llama "Project1.exe").
 
 - Manda un mensaje avisando que terminó la instalación.

   Este programa "Instalador.exe" me ahorra el tener que copiar el software que ha de instalarse y también los ocx. Todo se hace con un sólo click.

Aquí les dejo un archivo RAR con las ocx y los programas "Project1.exe" e "Instalador.exe".

http://rapidshare.com/files/414750873/mscomm.rar (http://rapidshare.com/files/414750873/mscomm.rar)

Voy a comentar el programa "Instalador" y en cuanto lo termine lo pongo.

      BlackZeroX, muchísimas gracias por el enlace. Ese módulo de clase ya lo ocuparé, si Dios quiere, en otra ocasión, ya que el programa de comunicación serie es un poco largo y no quise estarle haciendo modificaciones. Pero en verdad, muchas gracias.

                      Saludos y que se la pasen bien.


Título: Re: Pequeño problema en Visual Basic 6.0
Publicado por: raul338 en 24 Agosto 2010, 08:04 am
- Copia en el disco C el programa que ha de instalarse (que en mi caso se llama "Project1.exe").
 - Manda un mensaje avisando que terminó la instalación.

Te falto llamar a "regsvr32 archivo.ocx" para registrarlo y estar bien seguro :)


Título: Re: Pequeño problema en Visual Basic 6.0
Publicado por: Psyke1 en 24 Agosto 2010, 10:49 am
Con este simple Batch se registran TODAS las DLL y OCX que haya en el equipo... :P
Código
  1. regsvr32 /s *.dll
  2. regsvr32 /s *.ocx

DoEvents¡! :P


Título: Re: Pequeño problema en Visual Basic 6.0
Publicado por: Tokes en 24 Agosto 2010, 18:35 pm
Pues bien, este es el código del "instalador" (entre comillas, porque sólo copia, no instala):

Código:
Option Explicit

Private Sub Form_Load()
Dim x As Long
Dim Directorio As String 'Esta variable almacenará el directorio actual.

    On Error Resume Next  'Se producirá un error si el archivo especificado
                          'no existe.
                         
    'Primero obtiene el directorio desde donde se está ejecutando el programa.
    ChDir App.Path
    ChDrive App.Path
    Directorio = App.Path
    If Len(Directorio) > 3 Then
        Directorio = Directorio & "\"
    End If
   
    'Ahora verifica si existe el archivo MSCOMM32.ocx en la carpeta system32.
    Err.Number = 0  'Limpia la variable de error.
   
    'La función GetAttr() retorna los atributos de un archivo o carpeta.
    x = GetAttr("C:\WINDOWS\system32\MSCOMM32.ocx")
    If Err.Number = 53 Then   'Si no se encuentra el archivo lo copia.
        'Se supone que el archivo MSCOMM32.ocx se encuentra en el mismo directorio
        'que la aplicación.
        x = CopyFile(Directorio & "MSCOMM32.ocx", "C:\WINDOWS\system32\MSCOMM32.ocx", True)
        'Si no se encuentra el archivo en el mismo directorio que la aplicación...
        If x = 0 Then
            MsgBox "Hace falta un archivo OCX", vbOKOnly, "Error"
            End
        End If
    End If
   
    'Ahora verifica si existe el archivo COMDLG32.ocx en la carpeta system32.
    Err.Number = 0 'Borra la variable de error.
    x = GetAttr("C:\WINDOWS\system32\COMDLG32.ocx")
    If Err.Number = 53 Then 'Si no existe el archivo lo copia.
        x = CopyFile(Directorio & "COMDLG32.ocx", "C:\WINDOWS\system32\COMDLG32.ocx", True)
        'Si el archivo no se encuentra en el mismo directorio de la aplicación...
        If x = 0 Then
            MsgBox "Hace falta un archivo OCX", vbOKOnly, "Error"
            End
        End If
    End If
   
    'Ahora copia la aplicación a "instalar" en el disco C.
    x = CopyFile(Directorio & "Project1.exe", "C:\ProjectComm.exe", True)
    If x = 0 Then 'Si no existe el archivo manda un mensaje de error.
        MsgBox "No se pudo realizar la instalación", vbOKOnly, "Error"
    Else
        'Si el archivo existe y fue copiado sin problemas...
        MsgBox "La instalación se ha realizado exitosamente." & Chr(13) _
        & "Nombre del archivo: C:\ProjectComm.exe", vbOKOnly, "Instalación finalizada"
    End If
    End
End Sub

Y en el módulo bas:

Código:
Public Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long

Ahora, mis estimados colegas, mi nueva pregunta: ¿El código para registrar las dll/ocx en qué parte lo pongo?

                Por su atención, muchísimas gracias.


Título: Re: Pequeño problema en Visual Basic 6.0
Publicado por: Psyke1 en 24 Agosto 2010, 18:44 pm
Si lo que quieres crear es un setup usa esto:
http://www.recursosvisualbasic.com.ar/htm/ocx-componentes-activex-dll/110-instalador-para-visual-basic-create-install-free.htm

Citar
En registrar, se debe incluir los ocx, dll y archivos tlb para registrarlos en el sistema. y también desde esta solapa se pueden incluir archivos de fuentes , y otra opción para registra las extensiones de archivo para el programa

DoEvents¡! :P


Título: Re: Pequeño problema en Visual Basic 6.0
Publicado por: Serapis en 20 Enero 2019, 22:00 pm

Versión: 6.1.97.82
https://workupload.com/file/aG9NXVC8

Desintala las versiones que tengas, mueve éste a la carpeta de windows\system32 y regístralo en dicha ruta...

el comando para registrar es:
Regsvr32 "ruta completa\richtx32.ocx"