Archivo de la etiqueta: VB6

Temas relacionados con Visual Basic 6.0 y anteriores (VB no para .NET)

La evolución de .Net, una plática de Héctor de León con «El Guille»

Pues eso… hoy he tenido una charla en directo con Héctor de León (del canal hdeleon.net) sobre la evolución de .NET y sobre (la evolución de) un servidor de ustedes… Eso fue a las 19:00 hora de España (12:00 pm hora de México), pero si te lo perdiste o lo quieres volver a ver, aquí te dejo el enlace (y el video insertado), espero que te guste y te sea de utilidad y de paso sabrás un poco más de qué hace ahora el Guille y todas esas cosas… 😉

Aquí te dejo el enlace al susodicho video:

El enlace: La evolución de .Net, una plática con «El Guille» | Invitado Guillermo Som de elguille.info

El video insertado en un iframe:

 

Espero que te sirva, al menos para conocer al que escribe estas cosas tan raras de programación en este blog (www.elguillemola.com) y en el «clásico» de www.elGuille.info

Nos vemos.
Guillermo

Cálculos aritméticos en tu código con EvaluarExpresiones

Pues eso… ya he corregido y actualizado el código de evaluar expresiones aritméticas que publiqué inicialmente en octubre de 2007. Además he ampliado la funcionalidad que tenía usando algunas cosas que ya hacía en la versión que creé en su día con Visual Basic 6 (cFormulas – Una clase para analizar expresiones numéricas).

Como por ejemplo poder definir variables y funciones propias, además de poder usar contenido entre comillas dobles (solo para mostrar, no es que utilice variables alfanuméricas).

Para usar el «evaluador de expresiones» necesitas tener una referencia a la DLL (elGuille.EvaluarExpresiones.dll) en tu proyecto de .NET (al menos funciona con Visual Basic y C#) y tener instalado al menos el .NET 4.7.

Crear una variable a la que asignes una nueva instancia de elGuille.Developer.EvaluarFunciones.
Dim ev As New elGuille.Developer.EvaluarFunciones.

Si quieres añadir variables antes de empezar a usar el método Evalua, lo puedes hacer con ev.NewVariable(«A», «123+5+2″) y si quieres crear una función, hazlo con ev.NewFunction(«Doble», «N», «N*2»). Si quieres hacer varias asignaciones de un golpe, puedes usar ev.AsignarVariables(«C=A+B: D=12345: F=A*D»).

Y para evaluar las diferentes expresiones usa el método Evalua al que le pasarás como argumento una cadena con el «texto» a evaluar, por ejemplo:
resultado = ev.Evalua(«X=10:A=5*3: P=3.14: X + A + P»)

Descargar el código fuente y la DLL

El código completo de la DLL está en EvaluarExpresiones_src.zip que tiene un tamaño de 191 KB (195.897 bytes) y que puedes descargar pulsando directamente en el enlace anterior (está en el sitio downloads.elguille.info).
Revisión v.58 del 29/Ago/2020

Ese código es un proyecto de Visual Basic .NET.

En otra ocasión actualizaré este artículo para poner algunos ejemplos de uso. Aunque los publicados en los dos enlaces que te puse al principio te pueden servir.

Espero que te sea de utilidad… ya sabes… de eso es de lo que se trata 😉

Nos vemos.
Guillermo

Números aleatorios con decimales en .NET

Pues eso… aquí te explicaré cómo generar números aleatorios con decimales y cómo indicar los valores entre los que quieres que estén esos números usando la clase Random de .NET y con ejemplos tanto para Visual Basic .NET como para C# (e incluso para BASIC, bueno… al menos para Visual Basic 6.0 y anteriores).

Pero primero te contaré la «batallita del Guille» para que sepas el porqué a estas alturas de la vida te explico algo tan «elemental» Winking smile

Si no te quieres leer la batallita, pues… pasa un poco más abajo que ahí te muestro el código de ejemplo tanto para Visual Basic .NET como para C# e incluso para VB6.

La batallita del Guille

Estaba yo el otro día escribiendo un código en el que necesitaba generar dos números aleatorios (en realidad varios).
Dos de ellos eran números enteros, en esos no tuve mayor problema, ya que tenía este artículo publicado en mi sitio: Random.Next ese incomprendido  y me lo leí, y todo a la perfección… Winking smile

El problema me surgió al crear los números aleatorios con decimales.
Yo sabía que usando NextDouble de la clase Random era como tenía que hacerlo (la certeza era porque yo lo decía al final del artículo ese que te he comentado en el párrafo anterior Winking smile).
Y curiosamente en ese mismo comentario decía que lo más parecido a la función Rnd() de Visual Basic 6.0 era precisamente NextDouble.
Pero… ¿quieres creerte que ya no me acordaba cómo se usaba la función RND de BASIC? jajajaja, en fin… seguramente serán cosas de la edad o de que en los últimos años no tengo la programación como una de mis tareas diarias… en fin…

La cuestión es que volvía a buscar en la web (indicando elGuille) cómo usar RND o casi… y me encontré como mi Curso Básico de Programación en Visual Basic, concretamente en las soluciones de la décima entrega, lo explicaba… ¡menos mal que el Guille aún mantiene su sitio después de los 22 años que cumplió hace pocos días! Winking smile

Generar un número aleatorio con decimales entre dos cifras

El método NextDouble genera un número que será igual o mayor que 0.0 y menor (pero no igual) que 1.0.
Por tanto si lo multiplicaras, por ejemplo por 6, generaría un valor que iría desde 0.0 a 5.99.

Nota:
En Visual Basic 6.0 (o incluso en VB.NET y si me apuras hasta en C#) se utilizará la función Rnd para hacer el mismo papel que NextDouble, pero con valores de tipo Single en lugar de Double.

Tal como explico en las respuestas del curso básico, si quieres un número entero entre 20 y 50 debes escribir un código como este (este ejemplo es de VB6, las variables están declaradas en otra parte… supongo)

T = Int(Rnd * 31) + 20 ‘Número de rascadas, T valdrá de 20 a 50

Es decir la función Rnd (o el método NextDouble) debes multiplicarlo por  31 (50-20+1) y después añadirle el mínimo (20). De esa forma se genera el rango de valores que queremos usar.
En ese ejemplo se usa la función Int para convertir el resultado en un número entero, pero recuerda que ¡es código de VB6!

Ahora veremos ese mismo ejemplo pero haciendo las cosas bien y con .NET.

El código de ejemplo

El siguiente código creará un número aleatorio (con decimales) entre 20 y 50 (ambos incluidos).

Inserta este código en el método Main de una aplicación de consola.

Código para Visual Basic .NET

Dim r As New Random()

Dim minimo As Integer = 20
Dim maximo As Integer = 50

Dim res = (r.NextDouble() * (maximo - minimo + 1)) + minimo
Console.WriteLine("Un número Double entre {0} y {1} (incluidos)", minimo, maximo)
Console.WriteLine("(r.NextDouble * ({0} - {1} + 1)) + {1} = {2}", maximo, minimo, res)
Console.WriteLine()

Console.ReadLine()

Código para C#

var r = new Random();

int minimo = 20;
int maximo = 50;

var res = (r.NextDouble() * (maximo - minimo + 1)) + minimo;
Console.WriteLine("Un número Double entre {0} y {1} (incluidos)", minimo, maximo);
Console.WriteLine("(r.NextDouble * ({0} - {1} + 1)) + {1} = {2}", maximo, minimo, res);
Console.WriteLine();

Console.ReadLine();

La salida mostrada será algo así:

numeros_aleatorios_vb_02
Figura 1. Salida del código de ejemplo

Casualmente el número generado aleatoriamente es 50 y pico… para que veas que el máximo también se incluye Smile

Resumiendo

Para generar un número entre dos valores (ambos incluidos) usa el cálculo siguiente:

(r.NextDouble() * (maximo – minimo + 1)) + minimo

o este otro que también hace lo mismo:

(r.NextDouble() * (minimo – maximo)) + maximo

Resaltar aquí, que si quieres la misma funcionalidad que el método Next de la clase Random, es decir que el valor generado sea igual o mayor que mínimo pero menor que máximo tendrías que hacerlo de esta forma:

(r.NextDouble() * (maximo – minimo)) + minimo

Para finalizar, recordarte que le eches un vistazo a las explicaciones que doy en el artículo que te indiqué al principio:
Random.Next ese incomprendido

Espero que te sirva Winking smile

Nos vemos.
Guillermo

Error al usar una DLL de COM (ActiveX) en Windows 8 (x64)

 

Pues eso… que estaba yo actualizando al Visual Studio 2012 una aplicación que hace un par de años me funcionaba en Windows 7 con Visual Studio 2010 y en el que utilizo un componente ActiveX (COM) creado con Visual Basic 6.0. Pero a la hora de usarlo me da este error:
Retrieving the COM class factory for component with CLSID {6366501A-4960-4E2D-8E09-00F022ACD30E} failed due to the following error: 80040154.

Y después de varias búsquedas en google y desechar las que indican que hay que registrar el OCX/DLL con permisos de administrador (eso ya lo sabía yo desde Windows Vista, jeje) y ver que lo único "medio válido" es un comentario de que compile la DLL a 64 bits, me digo yo a mi mismo (algunas veces hablo con mi otro yo) ¿y si es cosa de que debe estar en modo x86?

Así que, me voy al Visual Studio 2012 (en realidad no es que me vaya, está algo complicado de que me pueda meter yo por la pantalla… si no que centre mi atención en el VS) y cambio en la ficha de Compilación (Compile) que en vez de AnyCPU sea x86, el cambio lo hago en los tres proyectos que utiliza lo que estoy mirando (aunque creo que sólo sería necesario en el ejecutable no en las 2 dll, pero por si las flais, lo cambio en todos).

¡Y funciona!

 

Así que… aquí estoy contándotelo por si alguna vez te pasa (o me vuelve a pasar a mí y no me acuerdo del tema…)

 

Espero que te sea de utilidad y acuérdate de "donar" algo… que si no… ¡que malamente está la vida! ¡ay! en fin…

 

Nos vemos.
Guillermo

Código de ejemplo de Fluent Interface para CSharp y Visual Basic

Pues eso, que ya está el código de ejemplo para que lo puedas descargar desde mi sitio:

.NET/VB6: Código de ejemplo de cómo usar Fluent Interface en C#, Visual Basic .NET y Visual Basic 6.0

Como puedes ver por el título, están los ejemplos para C#, VB.NET y VB6, además el de VB.NET está para la versión 2010 (VB10) y 2008 (VB9) cuyo código también es válido para la versión 2005 (VB8) y supongo que también para las anteriores, aunque no lo he probado… aunque lo mismo algún día lo pruebo… al menos en el VS2003, es decir para VB7.1.

Nos vemos.
Guillermo

P.S.
Si quieres leer el artículo o post que publiqué hace un par de días en este mismo blog, lo puedes hacer desde este enlace:
Fluent Interface no es solo simular el WITH de VB

Un foro de ayuda para convertir de VB6 a VB.NET

Pues eso… a raíz del comentario de Claudio sobre esto de seguir usando VB6 en vez de pasarse definitivamente a VB2005 (o cualquier otra versión de Visual Basic para .NET) y de que sería conveniente tener un sitio de "debate" sobre el tema, pues… he creado un foro (en mis foros) sobre este tema de "Convertir de VB6 a VB.NET", este es el link:

http://foros.elguille.org/Mensajes.aspx?IDForo=16

 

Espero que te sea de utilidad… 😉

 

Nos vemos.
Guillermo
P.S.
POR FAVOR no uses este comentario para hacer preguntas sobre cómo convertir código de VB6a  VB.NET, para eso está ese foro, además de que allí he puesto unos cuantos enlaces de cosas que te pueden interesar sobre la conversión de VB6 a VB.NET, que encontrarás en mi sitio… incluso para funciones del API…

Este es el post en el que están esos enlaces:
http://foros.elguille.org/Mensajes.aspx?ID=52500