La librería gsAxDLL
Librería de clases útiles para el programador

 

Publicado el 6/Ene/1999
Revisiones del 26/Feb/99, 7/Mar/99, 01/Jul/2000


Un par de cosas que debes saber (26/Feb/99)

La "refinitiva" (7/Mar/99)

Nueva revisión del 01/Jul/2000  
(y varias notas repartidas por toda la página, busca: 01/Jul/2000)


Aquí está, aunque aún no la he depurado al 100% (creo que eso es casi imposible), pero tengo que seguir probándola para que funcione como debe ser.
Además de ir agregando información al fichero de ayuda que tiene, ya que sin él, poco podrás hacer, al no disponer del código fuente, (y no me lo pidas, porque, por ahora sigue sin ser público).
Aunque la mayoría del código está publicado ya en mis páginas, así que tan sólo no tendrás el código de las clases nuevas y los cambios que he realizado a algunas de las clases y funciones que ya están publicadas.
Por ejemplo la función de convertir números a letras (o a texto, como prefieras), que ahora maneja muchísimo mejor los decimales, además de permitir especificar el nombre de la moneda y de los céntimos, así como el "sexo" de la moneda, entre otras cosas.
Otra clase que he ampliado es la cWrap, ahora permite "justificar" texto, además de otras mejoras...

Entre las cosas nuevas, está la clase cgsFileOp para manejo de ficheros usando el API de Windows, los que se "coleguizaron" con el gsBackUP, tienen el código y desde aquí les recuerdo que el código es para uso privado, según se convino... ¡que no se olvide!
Desde entonces esa clase ha mejorado un poco, así que si compraste el gsBackUP, mándame un mensaje recordándome que eres colega deLuxe y te enviaré el nuevo código.

Otra clase nueva es la que permite "enumerar" los recursos de red, así como los nombres de equipos y grupos de trabajo.

Y si no recuerdo mal, otra clase nueva es una que permite crear clases jerarquizadas, está basada en una jerarquía para almacenar Libros, por eso se llama cLibrería.

De todas estas clases, hay ejemplos de cómo usarlas, uno más concisos que otros, pero de todos hay ejemplos.

Además en la ayuda se explican cada una de las clases y las propiedades y métodos que tiene, además de algunos ejemplos.

En fin, no es que quiera ponerte los dientes largos, porque no es esa la intención, la intención es que puedas disponer de una serie de objetos (o clases) que estén más o menos relacionadas y que sean de utilidad en la mayoría de las ocasiones.

A continuación te muestro cómo registrar la clase y cómo insertarla en tu proyecto.

En el zip con la DLL y con el fichero de ayuda, del que entrego el proyecto y el fichero RTF para crear la ayuda, hay dos ficheros BAT, uno para registrar la clase y otro para eliminarla del registro y opcionalmente del directorio System.

Para registrarla, copiala en el directorio System, (la localización dependerá de dónde le dijiste al Windows que lo creara, pero que por defecto es en C:\Windows\System), situate en ese directorio y escribe lo siguiente en la línea de comandos:
regsvr32 gsAxDLL.dll

Nota:
Si tu directorio System está en el path indicado más arriba, puedes usar el fichero Registrar la DLL.bat.

Para eliminarla del registro, situate en ese directorio y escribe:
regsvr32 /u gsAxDLL.dll

Después puedes borrarla

Nota:
Si tu directorio System está en el path indicado más arriba, puedes usar el fichero DesRegistrar la DLL.bat.

Sobre la ayuda:
Deberías copiar también la ayuda (ficheros hlp y cnt) en el directorio System.

Para insertarla en tu proyecto tendrás que ir al menú Proyecto del Visual Basic y en Referencias... selecciona:
gsAxDLL -Librería de clases útiles para el programador

A partir de aquí podrás usar las clases mediante la única clase "creable" que es cgsAxDLL, para ello declara una variable de esta forma:
Private m_gsAxDLL As gsAxDLL.cgsAxDLL
Y podrás crear el resto de las clases.
En la ayuda se explica cómo hacerlo, además de en el listado de ejemplo.

IMPORTANTE: El proyecto de ejemplo tiene una referencia a la librería, por tanto antes de cargar el proyecto tendrás que registrar la DLL.

 

Espero que te sea de utilidad y me gustaría que si encuentras algún error, que lo habrá, me lo digas, lo mismo que si crees que se debería cambiar o ampliar en algún sentido, toda sugerencia será bien recibida.
Así que si quieres hacer algún comentario sobre la librería, usa este link.

 

Nos vemos.
Guillermo

Este link te bajará la librería y los ficheros Bats para registrarla y "desregistrarla" (gsAxDLL.zip 134 KB) (Act: 7/Mar/99)
Pulsa este link para bajarte el Help de la DLL gsAxDLL (gsAxDLL_HLP.zip 71.4 KB) (Act: 7/Mar/99)
Pulsa en este otro para bajar los ficheros de ejemplo (gsAxDLL_ejemplos.zip 25.3 KB) (Act: 7/Mar/99)

Nota:
Más abajo tienes los zips de la nueva revisión de la DLL, creada con fecha del 30/Jun/2000


La "Refinitiva" (07/Mar/99)

Pues eso... que esta es la última "ampliación" de esta librería... seguramente seguiré actualizándola, pero siempre y cuando encuentre un "error gordo" que deba ser corregido.

¿Por qué no voy a seguir actualizandola/ampliándola?

Porque me está dando mucho problema el tema de la compatibilidad entre versiones... pero "sólo" con esta librería, así que, seguramente habrá otra versión que sea "realmente compatible", espero que así sea... dentro de poco la publicaré...

Los cambios en esta nueva y última versión son:

Mejora en la clase cNum2Text
Nueva clase para desglosar los parámetros de la línea de comandos.
Nueva clase para mostrar automáticamente en los combos mientras se escribe.
Nueva clase para manejar ficheros INIs, aunque ya se podían manejar mediante FileOp, ahora hay otra clase "independiente".

Por supuesto, la ayuda y los ejemplos están actualizados para estas nuevas clases.

Nota adicional:
Como ya te he comentado no va bien el tema de la compatibilidad entre versiones, pero no te preocupes que todo el código que tuvieras anterioremente te funcionará "sin cambios", lo único que no funciona es si el programa ya está compilado... osea tendrás que volver a compilarlo, pero nada más.

 

¡Espero que la disfrutes!

Nos vemos.
Guillermo
P.S. (01/Jul/2000)
No es la última, eso espero... ya que el tema de la compatibilidad con ejecutables creados con versiones anteriores ya está solucionado... confío en ello.
Al menos con esta versión (1.0.7010) y las posteriores que publique.
Si no recuerdo mal, creo que esta nueva versión es compatible "Binariamente" con la publicada el 06/Ene/99, pero NO con la del 07/Mar/99...
Un favorcillo: Si tienes algún ejecutable que usara la librería del 6 de Enero de 1999, me cuentas si esta nueva revisión es compatible sin necesidad de recompilar el ejecutable.

Leete el tema de la compatibilidad en componentes ActveX que está un poco más abajo y no te pasará lo que a mi me ha pasado...


Un par de cosas que debes saber. (26/Feb/99)

Estos comentarios están incluidos en la ayuda, pero como se que muchas veces la gente no lee todo lo que tendría que leer, los repito para que no haya ningún "mal entendido".

 

Sobre la compatibilidad binaria.

Después de varias pruebas, comprobaciones y algún que otro fallo "rompedor de cabezas", he tomado la decisión de generar nuevamente la librería basándo la compatiblidad binaria en la primera DLL que publiqué en mi web, la del 6 de Enero.

La razón de hacer esto es porque al intentar implementar nuevas funciones y/o clases, me daba un error de que no podía actualizar la librería debido a "nombres de módulos con el mismo nombre"… la verdad es que intenté todo lo que "sabía" que podía hacer, pero el resultado fue "malo", (por llamarlo de alguna forma), total que si quería hacer que esta librería fuese creciendo tenía que hacerlo de otra forma.

Revisando en varios libros sobre expertos en el tema, todos, (realmente sólo he consultado dos libros), recomendaban que la compatibilidad binaria se hiciese sobre una copia de la primera versión del componente. Uno de ellos lo decía específicamente y el otro simplemente lo usaba sin más explicaciones… Me refiero a lo de hacer la compatibilidad binaria con la primera versión del componente, con idea de que no se fuesen creando "nuevas" interfaces conforme se añadieran nuevas clases y o métodos a la librería (o componente).

Resumiendo: si has creado alguna aplicación con una revisión posterior de esta librería al 6 de Enero y anterior al 26 de Febrero, tendrás que volver a compilarla, ya que si no, te dará un error de que hay algo que falla.

El que avisa…

 

 

Nota del 01/Jul/2000 sobre la COMPATIBILIDAD BINARIA:

 

Notas sobre la compatibilidad en componentes ActiveX.
----------------------------------------------------------

Para no romper la compatibilidad de versiones:

  • Al crear la librería (DLL) la primera vez: hacerlo con compatibilidad de proyecto.

  • Hacer una copia de la DLL creada y renombrarla (esto no es obligatorio, pero recomendable),
    por ejemplo con la extensión .cmp o .dlc (yo uso esta última)

  • Al crear nuevas versiones, con nuevas propiedades y métodos, 
    hacerlo con compatibilidad binaria, apuntando a la copia creada con la nueva extensión.
    De esta forma, los programas compilados anteriormente siguen funcionando con la nueva DLL.

  • Copiar la nueva DLL con la extesión usada en la compatibilidad binaria.
    La copia creada con la nueva extensión, será siempre la última versión distribuida de la DLL

Todo esto es necesario para que se conserven las interfaces anteriores y las nuevas.
Los programas anteriores usarán la interface antigua y los nuevos la nueva.
Si se modifica demasiado la DLL al final el registro estará "abarrotado" de interfaces de 
nuestra DLL... así que si se pretende hacer un cambio "brusco", lo recomendable es crear una
nueva DLL con una versión diferente, pero de esta forma los programas anteriores no funcionarán
con la nueva DLL... habría que volver a compilarlos.

 

En resumen: Hacer una copia de la última DLL distribuida y usarla para la compatibilidad binaria, (antes yo la hacía con la original y así me ha ido... en fin...)


Sobre cómo usar las clases incluidas en la librería.

Me reitero en lo dicho anteriormente y explico un poco como va esto de crear referencias usando las Propiedades de la librería gsAxDLL.

Las clases/objetos disponibles son todos PublicNotCreatable, es decir que se pueden referenciar a esas clases para crear objetos que la manipulen, pero no se pueden crear con New.

Cuando se necesite usar una de esas clases, simplemente se usa la propiedad que hay para ello en el objeto global; al ser global, no es necesario crear una variable que haga referencia a ese objeto global, a pesar de que en casi todos los ejemplos así se use, entre otras cosas, porque estaban escritos antes de que la clase cgsAxDLL fuese GlobalMultiuse.

Por ejemplo, para crear una referencia a la clase de evaluar expresiones (cFormulasFormulas), se puede hacer de estas dos formas:

Directamente:

Dim tFormulas As cFormulas ' Siempre hay que declarar un objeto de la clase a usar

Set tFormulas = Formulas ' Se asigna usando la propiedad del objeto global

 

Mediante una variable del objeto global:

Dim tFormulas As cFormulas ' Siempre hay que declarar un objeto de la clase a usar

Dim m_gsAxDLL As gsAxDLL.cgsAxDLL

Set m_gsAxDLL = New gsAxDLL.cgsAxDLL

Set tFormulas = m_gsAxDLL.Formulas

 

Como puedes comprobar, es más fácil usarlo de la primera forma, ya que te evitas crear objetos intermedios cuando el propio Visual Basic lo ha creado ya…

 

Justificación de porqué no todas las clases son GlobalMultiuse:

La razón de que las clases contenidas en esta librería no sean GlobalMultiuse, es porque si así lo hiciera, podrían entrar en conflicto con alguna función, propiedad o método que ya exista en cualquier otro objeto global. De esta forma, al necesariamente tener que crear un objeto particular para cada una de las clases que quieras usar, sabrás "explicitamente" que vas a usar esa clase… ¿me explico?
Por ejemplo la función ConvDecimal está en dos de las clases, por tanto el VB no sabría cual de ellas es la que quieres usar… ya sé que podía haber eliminado una de ellas, pero… como las clases las voy haciendo de forma independiente y después las "uno" en esta DLL, pues…

 

Sobre los ejemplos incluidos:

En los ejemplos incluídos con esta revisión de la librería, (o componente, como prefieras llamarlo), se acompañan ejemplos de cómo usar los dos formatos arriba indicados. Verás en el código que existe una Constante condicional llamada ES_GLOBAL que indicará si se usa globalmente o se necesita una variable intermedia (cosa que era necesaria en la versión "original" de esta librería, ya que no se declaraba la clase básica como GlobalMultiuse.

 

Ahora la librería está compilada en código nativo, no se si esto acelerará las operaciones, pero se supone que sí.

 


Prueba de la librería en un UserDocument (7/Ene/99)

Si quieres, puedes probarlo "in-situ", osease desde el explorador... siempre que sea el Internet Explorer.
Para probarlo, he creado un UserDocument con algunas de las pruebas, no todas...

Nota: El UserDocument también lo puedes usar con el "Binder" (Cuaderno de Microsoft) del Office 97
para ello tendrás que agregar el fichero udocVB5.VBD o udocVB6.VBD según la versión que bajes.

Los siguientes links te cargarán una página en la que se mostrará el documento. Hay dos versiones, una para VB5 y otra para VB6.
Ten en cuenta de que el runtime adecuado debe estar instalado, sino es así, lo intentará instalar desde el sitio de Microsoft.
Por supuesto, ya que estas pruebas usan la Librería gsAxDLL, ésta se instalará también en tu equipo, además de la DLL para manejar el UserDocument.
Y para terminar, decirte que si no tienes la seguridad configurada, como mínimo a "media", no se instalará y aún así, te pedirá "autorización" para instalarse.

Si tienes algún problema, e incluso si no lo tienes, (recuerda que esto del UserDocument es más bien un experimento que otra cosa), por favor comunícamelo, indicándome que versión del Windows tienes, que versión del navegador (recuerda que sólo es para el Internet Explorer) y si tienes instalado el VB5 o VB6.
Desde ya, muchas gracias.

Prueba de UserDocument con VB5

Prueba de UserDocument con VB6

 

Nota sobre los UserDocuments: (26/Feb/99)

No sé porqué, pero esto del UserDocument funciona cuando le da el punto... así que, los ejemplos no están actualizados ni "garantizo" que funcionen ahora ni en un futuro; salvo que me de el punto y me ponga a indagar más sobre el tema, pero soy de las personas que cuando algo no funciona como se supone que debe funcionar y sobre todo no siempre funciona, paso del tema y me dedico a otra cosa...

 


Algunas imagenes del programa de prueba y el contenido de la ayuda:


Nueva revisión del 01/Jul/2000

No se exactamente que cambios hay con respecto a la publicada el 7 de Marzo del año pasado, pero entre otras cosas hay varias correcciones en la clase cNum2Text y en cQueryReg.
En esta última se ha añadido una nueva función: ShellFolders2 que tiene en cuenta al usuario actual y el resto de las actualizaciones que tiene la clase "normal" que tengo publicada: cQueryReg.cls.
Entre otras cosas, varias correcciones para Windows 2000 (y Windows NT 4, aunque no lo he comprobado)

Además: ahora está compilada con el VB6 SP3

Seguramente si usas esta librería en algunos de tus programas, tendrás que "recompilarlo", no te lo puedo asegurar, pero casi seguro que sí.
De todas formas, las nuevas revisiones que esta librería pueda tener, no tendrán ese problema, al menos eso es lo que espero, ya que es un rollo eso de distribuir una aplicación y tener que recompilarla porque la librería ha cambiado... eso precisamente es lo que se quiere evitar con los componentes como este.

Leete esto que te interesará: Compatibilidad binaria en componentes ActiveX

 

Downloads del 01/Jul/2000:

Aquí tienes el link a los ficheros zip con la librería y el formulario de ejemplo:

La librería gsAxDLL.dll: gsaxdll_01072000.zip (139 KB)

El código de ejemplo (con el ejecutable): gsAxDLL_eje01072000.zip (48.5 KB)


ir al índice