Acerca de:

Este blog contiene los códigos, ejemplos y bases de datos que he usado cuando aprendía acerca de algún tema específico. En lugar de borrarlos (una vez dominado ya el tema), he decidido publicarlos :)

martes, 14 de septiembre de 2010

Cómo pasar parámetros desde una App en VB6 a una App escrita en C#

En general, para ejecutar otra aplicación desde VB6 y pasarle un parámetro se usa el siguiente código:

Dim LInstr As Long
Dim RutaExe As String
Dim sExeName As String

' para este caso rutaExe = vbNullString

sExeName = RutaExe & "notepad.exe" & _
        Chr$(32) & Chr$(34) & "D:\archivo_1.txt" & Chr$(32) & Chr$(34)
       
' Se ejecuta
LInstr = Shell(sExeName, vbNormalFocus) 

Esto abrirá el archivo "archivo_1.txt" (en caso de existir) en el block de notas.

El número 32 equivale al código Ascii del espacio en blanco, 34 es el código Ascii de las comillas.

Lo bueno del C# es que todas las aplicaciones escritas en este lenguaje arrancan desde un método Main con la siguiente forma:
static void Main(string[] args)

El array "args" del tipo string recibe todos los parámetros que le pasamos al ejecutable. Si es una aplicación de consola llamada "miExe" se escribiría:


Donde "1", "2" y "3" son strings y corresponden a las variables args[0], args[1] y args[2] en la aplicación en C# respectivamente. Si se desea operar con ellas, se deberá convertir de string al tipo numérico deseado, pues "Main" siempre recibe los parámetros como string. Los elementos del array args se emplean como cualquier variable de .Net tipo string.

Si queremos llamar a miExe y pasarle parámetros desde una aplicación en VB6, el código fuente será:

Dim LInstr as Long
Dim RutaExe as String
Dim sExeName as String
Dim arg1 as String, arg2 as String, arg3 as String

... coding...  coding... coding.....
' rutaExe contiene la ruta a la carpeta donde está miExe.exe

sExeName = RutaExe & "\miExe.exe" & _
        Chr$(32) & Chr$(34) & arg0 & Chr$(32) & Chr$(34) & _
        Chr$(32) & Chr$(34) & arg1 & Chr$(32) & Chr$(34) & _
        Chr$(32) & Chr$(34) & arg2 & Chr$(34) 

' Se ejecuta miExe
LInstr = Shell(sExeName, vbMinimizedNoFocus ' el segundo parámetro es opcional

La aplicación en C# separará los argumentos de la forma correcta, y los asignará a los elementos del array args, sólo si se los pasamos con espacios y comillas en el orden correcto. La aplicación en C# usa los espacios y las comillas para saber qué partes del string sExeName son el nombre del ejecutable y cada uno de los argumentos que está recibiendo.