Una ayuda com codigo para .exe, por favor.

Iniciado por carlosguay, 21 Diciembre 2009, 00:04 AM

0 Miembros y 1 Visitante están viendo este tema.

carlosguay

Vereis llevo un tiempo haciendo un bat, para manipular detos de un modem.
Tengo que hacer varias cosas, que las tengo ya resueltas, pero lo ultimo es sacar unos datos de la flash del modem.
Esto no se puede hacer com batch y tengo entendido que tiene que hacerse com java, por lo que tengo leido para usar java es mejor com visualbasic y por eso estoy intentando usar este codigo que os pongo.


Código (vbnet) [Seleccionar]
Imports System
Public Class Prueba
  Public Shared Sub Main()

Public Sub New()
    Me.components = Nothing
    Me.connected = False
    Me.port = &H17
    Me.raf = Nothing
    Me.bis = Nothing
    Me.ps = Nothing
    Me.skt = Nothing
    Dim num As Integer = 5
    If (num < 0) Then
        Throw New NegativeArraySizeException
    End If
    Dim textArray1 As String() = New String(num  - 1) {}
    textArray1(3) = "perm"
    Me.im = textArray1
    Me.InitializeComponent
End Sub

Public Overridable Sub connection(ByVal b As Boolean)
    Me.connected = b
    Me.hostname.set_Enabled((b Xor True))
   
    If Not b Then
        Try
            Me.skt.close
        Catch obj1 As Object When (?)
            Dim throwable As Throwable
            Dim exception As Exception = throwable
        End Try
        Try
            Me.raf.Close
        Catch obj2 As Object When (?)
            Dim throwable2 As Throwable
            Dim exception2 As Exception = throwable2
        End Try
    End If
End Sub

Public Overridable Function openFlash(ByVal s As String) As Boolean
    Me.send2Serial("cd /flash" & ChrW(13))
    Try
        Thread.sleep(500)
    Catch obj1 As Object When (?)
        Dim throwable As Throwable
        Dim exception As Exception = throwable
    End Try
    Me.send2Serial("close" & ChrW(13))
    Try
        Thread.sleep(500)
    Catch obj2 As Object When (?)
        Dim throwable2 As Throwable
        Dim exception2 As Exception = throwable2
    End Try
    Me.send2Serial(New StringBuffer().append("open ").append(s).append(ChrW(13)).ToString)
    Select Case Me.wait4("Flash driver opened", "ERROR - failed to o", Nothing, Nothing, Nothing)
        Case -1
            Return False
        Case 2
            Me.cout("ERROR: Unable to open the flash driver.")
            Me.cout("You need to reboot the modem.")
            Return False
    End Select
    Me.cout("Flash driver Opened.")
    If (Me.wait4("CM/Flash> ", Nothing, Nothing, Nothing, Nothing) Is -1) Then
        Return False
    End If
    Me.cout(New StringBuffer().append("Flash Device Ready (").append(s).append(" region)").ToString)
    Return True
End Function

Public Overridable Sub readFlash(ByVal s As String)
    If Not Me.openFlash(s) Then
        Return
    End If
    Dim stream As FileOutputStream = Nothing
    Dim flag As Boolean = False
    Try
        stream = New FileOutputStream(New StringBuffer().append(s).append(".bin").ToString)
        If (Not stream Is Nothing) Then
            flag = True
        End If
    Catch obj1 As Object When (?)
        Dim throwable As Throwable
        Dim exception As Exception = throwable
    End Try
    If Not flag Then
        Me.cout(New StringBuffer().append("Error opening local file ").append(s).append(".bin for writing").ToString)
        Return
    End If
    Me.cout(New StringBuffer().append("Reading ").append(s).append(" Flash region").ToString)
    Dim num As Integer = 0
    Dim num2 As Integer = 0
Label_0249:
    Do While flag
        Dim str As String = ""
        Me.send2Serial(New StringBuffer().append("readDirect 256 ").append(num).append(ChrW(13)).ToString)
        If (Me.wait4("region:", Nothing, Nothing, Nothing, Nothing) Is -1) Then
            flag = False
            Exit Do
        End If
        Do While flag
            Dim num3 As Integer = Me.getSerialByte
            If (num3 Is -1) Then
                Me.cout("Communication Error")
                flag = False
                goto Label_0249
            End If
            If ((((num2 < &H100) AndAlso (num3 >= &H30)) AndAlso (num3 <= &H39)) OrElse ((num3 >= &H61) AndAlso (num3 <= &H66))) Then
                str = New StringBuffer().append(str).append(DirectCast(num3, Char)).ToString
                If (StringImpl.length(str) Is 2) Then
                    Dim num4 As Integer = Integer.parseInt(str, &H10)
                    Try
                        stream.write(num4)
                    Catch obj2 As Object When (?)
                        Dim throwable2 As Throwable
                        Dim exception2 As Exception = throwable2
                    End Try
                    str = ""
                    num2 += 1
                    Continue Do
                End If
            End If
            Select Case num3
                Case &H42
                    Me.cout(New StringBuffer().append("Flash read of ").append(s).append(" region is complete. Output to file: ").append(s).append(".bin").ToString)
                    Me.send2Serial("close" & ChrW(13))
                    flag = False
                    goto Label_0249
                Case &H43
                    Do While (Not Me.getSerialByte Is &H3E)
                    Loop
                    num = (num + &H100)
                    num2 = 0
                    Me.cout(New StringBuffer().append("Read ").append(num).append(" bytes").ToString)
                    goto Label_0249
            End Select
        Loop
    Loop
    Try
        stream.close
    Catch obj3 As Object When (?)
        Dim throwable3 As Throwable
        Dim exception3 As Exception = throwable3
    End Try
End Sub

Public Overridable Function wait4(ByVal w1 As String, ByVal w2 As String, ByVal w3 As String, ByVal w4 As String, ByVal w5 As String) As Integer
    Dim str As String = ""
    Dim i As Integer
    For i = 0 To StringImpl.length(w1) - 1
        str = New StringBuffer().append(str).append(" ").ToString
    Next i
    Do
        Dim num2 As Integer = Me.getSerialByte
        If (num2 Is -1) Then
            Return num2
        End If
        str = New StringBuffer().append(StringImpl.substring(str, 1)).append(DirectCast(num2, Char)).ToString
        If StringImpl.equals(str, w1) Then
            Return 1
        End If
        If ((Not w2 Is Nothing) AndAlso StringImpl.equals(str, w2)) Then
            Return 2
        End If
        If ((Not w3 Is Nothing) AndAlso StringImpl.equals(str, w3)) Then
            Return 3
        End If
        If ((Not w4 Is Nothing) AndAlso StringImpl.equals(str, w4)) Then
            Return 4
        End If
    Loop While ((w5 Is Nothing) OrElse Not StringImpl.equals(str, w5))
    Return 5
End Function

Console.Read
  End Sub
End Class



Esto que os pongo som recortes que e ido pegando, que creo hace lo que necesito, pero como vereis, le sobraran cosas y le faltaran seguro.

Pues si alguien tiene tiempo de hecharle una mirada a este codigo, se lo agredeseria mucho.
Yo lo unico que necesito es que al ejecutar el exe. saque lo que necesito sin mas, osea sin preguntar nada, ejecutar y funcionar.

un saludo
















raul338

Primero que nada eso es .net

Segundo, esta todo el codigo dentro del Sub Main o.O (deberias ponerlo aparte)

raul338

CitarEsto que os pongo som recortes que e ido pegando, que creo hace lo que necesito, pero como vereis, le sobraran cosas y le faltaran seguro.

no se que hace... ni me he fijado, solo te arreglo lo que te dije, el sub main, es aparte. Pero creo que no funciona (a simple vista), lo que hiciste es una clase, deberias implementarlo en un formulario ;)

Código (vbnet) [Seleccionar]
Imports System
Public Class Prueba
  Public Shared Sub Main()
        Application.Run(New Prueba())
  End Sub

Public Sub New()
    Me.components = Nothing
    Me.connected = False
    Me.port = &H17
    Me.raf = Nothing
    Me.bis = Nothing
    Me.ps = Nothing
    Me.skt = Nothing
    Dim num As Integer = 5
    If (num < 0) Then
        Throw New NegativeArraySizeException
    End If
    Dim textArray1 As String() = New String(num  - 1) {}
    textArray1(3) = "perm"
    Me.im = textArray1
    Me.InitializeComponent
End Sub

Public Overridable Sub connection(ByVal b As Boolean)
    Me.connected = b
    Me.hostname.set_Enabled((b Xor True))
   
    If Not b Then
        Try
            Me.skt.close
        Catch obj1 As Object When (?)
            Dim throwable As Throwable
            Dim exception As Exception = throwable
        End Try
        Try
            Me.raf.Close
        Catch obj2 As Object When (?)
            Dim throwable2 As Throwable
            Dim exception2 As Exception = throwable2
        End Try
    End If
End Sub

Public Overridable Function openFlash(ByVal s As String) As Boolean
    Me.send2Serial("cd /flash" & ChrW(13))
    Try
        Thread.sleep(500)
    Catch obj1 As Object When (?)
        Dim throwable As Throwable
        Dim exception As Exception = throwable
    End Try
    Me.send2Serial("close" & ChrW(13))
    Try
        Thread.sleep(500)
    Catch obj2 As Object When (?)
        Dim throwable2 As Throwable
        Dim exception2 As Exception = throwable2
    End Try
    Me.send2Serial(New StringBuffer().append("open ").append(s).append(ChrW(13)).ToString)
    Select Case Me.wait4("Flash driver opened", "ERROR - failed to o", Nothing, Nothing, Nothing)
        Case -1
            Return False
        Case 2
            Me.cout("ERROR: Unable to open the flash driver.")
            Me.cout("You need to reboot the modem.")
            Return False
    End Select
    Me.cout("Flash driver Opened.")
    If (Me.wait4("CM/Flash> ", Nothing, Nothing, Nothing, Nothing) Is -1) Then
        Return False
    End If
    Me.cout(New StringBuffer().append("Flash Device Ready (").append(s).append(" region)").ToString)
    Return True
End Function

Public Overridable Sub readFlash(ByVal s As String)
    If Not Me.openFlash(s) Then
        Return
    End If
    Dim stream As FileOutputStream = Nothing
    Dim flag As Boolean = False
    Try
        stream = New FileOutputStream(New StringBuffer().append(s).append(".bin").ToString)
        If (Not stream Is Nothing) Then
            flag = True
        End If
    Catch obj1 As Object When (?)
        Dim throwable As Throwable
        Dim exception As Exception = throwable
    End Try
    If Not flag Then
        Me.cout(New StringBuffer().append("Error opening local file ").append(s).append(".bin for writing").ToString)
        Return
    End If
    Me.cout(New StringBuffer().append("Reading ").append(s).append(" Flash region").ToString)
    Dim num As Integer = 0
    Dim num2 As Integer = 0
Label_0249:
    Do While flag
        Dim str As String = ""
        Me.send2Serial(New StringBuffer().append("readDirect 256 ").append(num).append(ChrW(13)).ToString)
        If (Me.wait4("region:", Nothing, Nothing, Nothing, Nothing) Is -1) Then
            flag = False
            Exit Do
        End If
        Do While flag
            Dim num3 As Integer = Me.getSerialByte
            If (num3 Is -1) Then
                Me.cout("Communication Error")
                flag = False
                goto Label_0249
            End If
            If ((((num2 < &H100) AndAlso (num3 >= &H30)) AndAlso (num3 <= &H39)) OrElse ((num3 >= &H61) AndAlso (num3 <= &H66))) Then
                str = New StringBuffer().append(str).append(DirectCast(num3, Char)).ToString
                If (StringImpl.length(str) Is 2) Then
                    Dim num4 As Integer = Integer.parseInt(str, &H10)
                    Try
                        stream.write(num4)
                    Catch obj2 As Object When (?)
                        Dim throwable2 As Throwable
                        Dim exception2 As Exception = throwable2
                    End Try
                    str = ""
                    num2 += 1
                    Continue Do
                End If
            End If
            Select Case num3
                Case &H42
                    Me.cout(New StringBuffer().append("Flash read of ").append(s).append(" region is complete. Output to file: ").append(s).append(".bin").ToString)
                    Me.send2Serial("close" & ChrW(13))
                    flag = False
                    goto Label_0249
                Case &H43
                    Do While (Not Me.getSerialByte Is &H3E)
                    Loop
                    num = (num + &H100)
                    num2 = 0
                    Me.cout(New StringBuffer().append("Read ").append(num).append(" bytes").ToString)
                    goto Label_0249
            End Select
        Loop
    Loop
    Try
        stream.close
    Catch obj3 As Object When (?)
        Dim throwable3 As Throwable
        Dim exception3 As Exception = throwable3
    End Try
End Sub

Public Overridable Function wait4(ByVal w1 As String, ByVal w2 As String, ByVal w3 As String, ByVal w4 As String, ByVal w5 As String) As Integer
    Dim str As String = ""
    Dim i As Integer
    For i = 0 To StringImpl.length(w1) - 1
        str = New StringBuffer().append(str).append(" ").ToString
    Next i
    Do
        Dim num2 As Integer = Me.getSerialByte
        If (num2 Is -1) Then
            Return num2
        End If
        str = New StringBuffer().append(StringImpl.substring(str, 1)).append(DirectCast(num2, Char)).ToString
        If StringImpl.equals(str, w1) Then
            Return 1
        End If
        If ((Not w2 Is Nothing) AndAlso StringImpl.equals(str, w2)) Then
            Return 2
        End If
        If ((Not w3 Is Nothing) AndAlso StringImpl.equals(str, w3)) Then
            Return 3
        End If
        If ((Not w4 Is Nothing) AndAlso StringImpl.equals(str, w4)) Then
            Return 4
        End If
    Loop While ((w5 Is Nothing) OrElse Not StringImpl.equals(str, w5))
    Return 5
End Function

End Class


carlosguay

Te agradezco mucho tus respuestas raul.

Veras yo se que cuesta mucho aprender algo, para que despues llegue alguien pidiendo lo que a uno le a costado años aprender.
Yo  no quiero que nadie me de algo ya echo, y te puedo decir que me a costado mucho poner este post, aunque no lo creas.

Eso que e puesto, como dije al principio, som trozos de codigo que se, seguro que es lo que necesito, pero no como un programa normal, como esta ese codigo.
Osea no com interface, si no como consola, osea eso que hace ese codigo,`pasarlo a consola.

Mi hobiie som los modems, y es para lo que necesito ese codigo, en el foro donde suelo andar, son muchas las preguntas que se responden muchas veces, y eso es desesperante, ver que la gente no lee.
Pero como tu sabras, esto que estoy pidiendo, no es que no me guste, pero no es facil de aprender, y no se aprende en dos dias ni mucho menos.

Te agradezco mucho el tiempo dedicado.

un saludo

raul338

Ahh...era de consola? porque no lo aclaraste (:xD jaja...se me paso xD, pero..... en el codigo hay un "Initialize component", o sea.... el codigo de donde proviene es una aplicacion de windows o.O)

Bueno, releyendo el codigo, hay partes de las que copiaste que son de una clase que hereda de algo (la pregunta es de que? y no conozco ninguna clase parecida :huh:), fijate bien de donde lo sacaste y si tiene alguna dependencia (fijate si tiene referencias a alguna dll o los "Imports" de arriba de todo)

Hay partes que parecen mezcla de C++ y Vb... de donde sacaron un "Me.cout(..)" :huh:

Nada de lo que dije fue por criticarte, sino que es para ayudarte a mejorar y aprendas de tus errores, porque de un simple copiar & pegar no se aprende, y ahi tu estas haciendo la diferencia, aunque te rompas el coco por que no te sale lo que quieres....ahi estas haciendo la diferencia...

carlosguay

Ya ya se que no era por criticarme, pero me parecio mejor explicarte un poco mis pensamientos y aclararte que de esto estoy totalmente pegado.

Veras todo ese codigo, lo he sacado de demcopilar un programa que tengo, lo que pasa es que ese programa, tiene muchisimos botones, exactamente 14, y te e puesto solo lo que necesito, que som dos botones, una para conectar y el otro hace la lectura de la parte que necesito.

Este programa, no lleva ninguna dll ni ocx, si te puedo decir que necesita el NET.Framework, para que funcione.

Yo e sacado ese codigo como visualbasic, porque creo haber leido que para usar NET, es asin, aunque com el decompilador que tengo puedo sacar el codigo, com el lenguaje que quiera.

Lo de los Imports, no lo comprendo y no se exactamente que necesitarias.

Te puedo decir, que en los dos meses aprosimados que llevo metido en este mundo, he aprendido bastante de batch y de programacion en general, aunque creo que e empezado la casa por el tejado, como se dice por mi tierra y tendria que hacer un curso para novatos aunque sea.

Se que de copiar y pegar no se aprende nada, pero cuanto tardaste tu en saber lo que sabes?.

A mi me encantaria aprender algun lenguaje, pero sinceramente, por la edad que tengo y por lo que llevo leido de programacion, creo que lo que alguien aprenda en un año, yo necesitaria dos años, o mas jejeje.

Pero por supuesto que pienso seguir leyendo sobre programacion, es genial y alomejor algun dia, sea yo quien responda a alguien com sus dudas.

un saludo

raul338

Cita de: carlosguay en 22 Diciembre 2009, 14:08 PM
Ya ya se que no era por criticarme, pero me parecio mejor explicarte un poco mis pensamientos y aclararte que de esto estoy totalmente pegado.

Veras todo ese codigo, lo he sacado de demcopilar un programa que tengo, lo que pasa es que ese programa, tiene muchisimos botones, exactamente 14, y te e puesto solo lo que necesito, que som dos botones, una para conectar y el otro hace la lectura de la parte que necesito.

Este programa, no lleva ninguna dll ni ocx, si te puedo decir que necesita el NET.Framework, para que funcione.

Yo e sacado ese codigo como visualbasic, porque creo haber leido que para usar NET, es asin, aunque com el decompilador que tengo puedo sacar el codigo, com el lenguaje que quiera.

Lo de los Imports, no lo comprendo y no se exactamente que necesitarias.
Ok, no lleva ocs, y lo de los Imports indican que parte del .Net framework va a usar el programa (las funciones del framework son muchas y estan separadas por categorias (Nombres de espacio - se llaman con Imports) Ejemplo, si voy a usar Criptografia llamo a System.Criptography (o algo asi..), si voy a usar graficos con GDI llamo a System.Drawing, si llamo a otras DLLs que estan hechas tambien en .net llamo a System.Reflection.
con lo cual arriba de todo quedaria

Código (vbnet) [Seleccionar]

Imports System.Criptography
Imports System.Drawing
Imports System.Reflection

ahora se entiende mejor? Fijate en los programas decompilados cuales son los "Imports" que usa

Cita de: carlosguay en 22 Diciembre 2009, 14:08 PM
Te puedo decir, que en los dos meses aprosimados que llevo metido en este mundo, he aprendido bastante de batch y de programacion en general, aunque creo que e empezado la casa por el tejado, como se dice por mi tierra y tendria que hacer un curso para novatos aunque sea.

Se que de copiar y pegar no se aprende nada, pero cuanto tardaste tu en saber lo que sabes?.

A mi me encantaria aprender algun lenguaje, pero sinceramente, por la edad que tengo y por lo que llevo leido de programacion, creo que lo que alguien aprenda en un año, yo necesitaria dos años, o mas jejeje.

Pero por supuesto que pienso seguir leyendo sobre programacion, es genial y alomejor algun dia, sea yo quien responda a alguien com sus dudas.

un saludo

Todos pueden programar, no es necesario ser un genio para eso (nadie nacio sabiendo). Yo llevo dentro de este mundo casi 6 años, y tambien estuve como vos, viendo codigos de diversas paginas para juntarlos y hacer algo mio y luego (como sea) cambiar todo, algunas veces salieron, otras no. Es solo cuestion de practicar.

Saludos!

carlosguay

Te agradezco mucho tu comprexion, ahora esta mas claro todo.

En el post inicial, pongo que lo que necesitaria, seria una aplicacion o .exe, que al ejecutarlo haga lo que necesito.

Veras antes de hacer ese paso, tengo que hacer otras cosas que ya tengo superadas com el bat, y ya que esa parte no se puede meter dentro del bat, al menos que pudiera ejecutarlo desde el bat, joder cuantos bats.

Por eso lo que te comento de conectar, osea el boton de conectar no lo necesitaria, aunque si ves necesita un hosname, que es una IP, que tendria que ponerle, y habia pensado algo como una variable que pudiera introducirla desde el mismo bat, pero por eso no te preocupes que ya pensaria yo algo.

Aqui tienes los Imports.


Código (vbnet) [Seleccionar]
Imports System
Imports System.ComponentModel
Imports System.Drawing
Imports System.IO.Ports
Imports System.Windows.Forms
Imports com.ms.vjsharp.cor
Imports com.ms.vjsharp.lang
Imports java.io
Imports java.lang
Imports java.net

Namespace WindowsApplication2

    Public Class Form1
        Inherits Form



Código (vbnet) [Seleccionar]
Imports System
Imports System.ComponentModel
Imports System.Drawing
Imports System.Windows.Forms
Imports com.ms.vjsharp.cor
Imports com.ms.vjsharp.lang

Namespace WindowsApplication2

    Public Class OffsetDialog
        Inherits Form


Te pongo las dos cabezeras completas.

un saludo

raul338

visual basic + java ?? o.O
Nunca toque java, sera el momento de aprender :P

Bueno, lo que tienes que hacer en tu proyecto, es nombrar los "Imports" que tienen esos 2 archivos (sin reptetir).... o sea...mira..en el archivo 1 tienes

Imports System
Imports System.ComponentModel
Imports System.Drawing
Imports System.IO.Ports

y en el archivo 2 tienes

Imports System
Imports System.ComponentModel
Imports System.Drawing
Imports System.Windows.Forms

Entonces en tu archivo que uniste todo, quedaria

Imports System
Imports System.ComponentModel
Imports System.Drawing
Imports System.Windows.Forms
Imports System.IO.Ports


entiendes??? ahora haz eso con las 2 listas que pusiste arriba.

Ademas, en el explorador de soluciones (la ventana donde esta el proyecto) veras una carpeta gris llamada "Referencias". Hazle click derecho y elige "Agregar Referencia"

En la lista que sale en una nueva ventana busca y marca estos items

Imports com.ms.vjsharp.cor
Imports com.ms.vjsharp.lang
Imports java.io
Imports java.lang
Imports java.net

No se si estaran con ese nombre, pero puedes buscar en internt de donde vienen :P

carlosguay

Perdona mi torpeza.
Dices en las dos listas?, te refieres a los Imports, porque codigo solo e puesto uno.

Cuando dices que agrege al proyecto, que tengo que intalar visulbasic,? yo como solo es un exe, o consola, habia pensado compilarlo desde NET.Framewor, asin.

csc Prueba.cs   o

vbs Prueba.vb

Y otra cosa, a ese codigo que pongo, para que sea por consola, le sobraran cosas, no?

Como ves estoy algo liadillo, jeje.

un saludo