Sie sind auf Seite 1von 6

Ustedes se preguntarn que hace aqu un post sobre tcnicas de programacin y ciertamente este escrito pareciera ser bastante

Off Topic de lo que nos trae a visitar este excelente foro. Pero la realidad es que con la evolucin de los nuevos circuitos basados en microcontroladores y el desarrollo cada vez ms masivo por parte de los aficionados y profesionales a la electrnica de interfaces que conectan los diseos circuitales a las computadoras, hace ms que necesario el conocimiento de lenguajes y tcnicas de programacin (la mayora de las veces no de nuestra preferencia), en un nivel de destreza que se puede catalogar entre medio y avanzado. Seguramente, muchos de nosotros hemos realizado proyectos en VB6 que involucran la creacin de DLL Activex y/o componentes COM. Visual Basic es considerado un lenguaje RAD o Rapid Application Development lenguaje y por ende, est diseado para realizar rpidamente interfaces de usuario y aplicaciones bajo ambiente Windows. Tambin deben haber odo que las DLL Activex no son verdaderas libreras de acceso dinmicas, y que cuando es necesario el uso de una DLL standard se debe recurrir a lenguajes ms potentes y generales como por ejemplo el C++ para poder desarrollarlas. Las limitaciones de ste lenguaje han llevado a un sinnmero de debates, llegndose incluso a decir que los verdaderos programadores pueden hacer cosas que los de visual Basic no. La creacin de DLL Windows o DLL Standard es una de ellas. Pero aqu no vamos a discutir este tipo de cosas, ni tampoco a realizar un foro super tcnico de cmo lograrlo pues tendramos que desarrollar hojas y hojas de explicaciones que en ocasiones pudieran llegar a hacerse tediosas y hasta imposibles de leer por lo pesado de su contenido. Si desarrollramos DLL Standard con VB6, podramos tener la posibilidad de utilizar y ofrecer facilidades como: multiprocesamiento, compartimiento y reutilizacin de cdigo, desarrollos modulares basados en tecnologa COM, actualizaciones fciles y un montn de ventajas adicionales para el diseo de los DRIVERS de nuestros circuitos. Voy a tratar de transmitirles como crear DLL no Activex con VB6 y poder de esta forma desarrollar verdaderas libreras de funciones que podremos reutilizar en cualquier lenguaje o programa que realicemos para controlar nuestra electrnica, ofreciendo de esta forma una manera alternativa para retardar y en algunos casos evitar, la migracin a otros lenguajes de programacin o darnos tal vez, algo ms de tiempo para que la curva de aprendizaje del nuevo lenguaje llegue al punto de mxima aceleracin. Este resumen est extrado del excelente trabajo realizado por Ron Petrusha, el cual pueden conseguir en el siguiente link http://www.windowsdevcenter.com/pub/...reate_dll.html All podrn encontrar la explicacin de las rutinas, sus teoras y funcionamiento.

Me limitar a explicarles que deben hacer para poder utilizarla y de antemano les recuerdo que su uso exige un conocimiento medio de VB6. Aqu vamos: A) Creacin del LINKER. Si nos fijamos en el directorio donde visual Basic est instalado en sus computadores (/VB98) , observaremos que existen 3 ejecutable: VB6.EXE, LINK.EXE y C2.EXE VB6.EXE es el que arranca el ambiente de desarrollo que ya conocemos, LINK.EXE es el enlazador o Linkeador y C2.EXE es el compilador que crea el proyecto utilizable. Podrn encontrar en este post, 2 archivos de proyectos VB6. El primero de ellos C2.ZIP y el segundo LINK.ZIP Estos proyectos generan 2 ejecutables: C2.EXE y LINK.EXE y como vern tienen el mismo nombre que los que utiliza visual Basic. Lo que hacen esto programas es interceptar la compilacin de nuestros proyectos y agregarles los parmetros de compilacin necesarios antes de llamar a los ejecutables originales. Este nuevo C2.EXE llama al verdadero compilador C2 y el LINK.EXE, al que se le denomina Link Proxy, llama al verdadero LINK de VB6. Para utilizar estos interceptores, hagan lo siguiente: 1) En el directorio de visual Basic renombren el archivo original C2.EXE a C2comp.exe y el archivo original LINK.EXE a LinkLnk.exe 2) Ahora copien los nuevos ejecutables que descargaron de aqu en el directorio de VB6. Ya estamos casi listos para poder tener la facilidad de crear nuestras DLL reales. Estos nuevos programas no varan la ejecucin normal del visual Basic 6, el cual lo seguir haciendo como siempre. Lo que si ser capaz de hacer, es detectar cuando estamos realizando una DLL Standard y es lo que paso a explicar. Para tal fin voy a utilizar el mismo ejemplo de Petrusha. Supongamos que queremos realizar un proyecto de una DLL que tenga funciones matemticas, a la que llamaremos MathLib. La librera tendr 3 funciones: Increment, Decrement y Square Para ello hacemos lo siguiente: 1) Iniciamos un proyecto nuevo de ACTIVEX DLL. 2) Agregaremos un MODULO (no de clase) al proyecto. 3) Colocamos el nombre al proyecto (Menu PROYECTO y luego PROPIEDADES DEL

PROYECTO). Aqui se recomienda usar el mismo nombre que le quieren dar a la DLL. 4) Colocamos los nombres deseados a los 2 mdulos (el .bas y el .cls) 5) Ahora escribimos nuestro cdigo en el mdulo (no en el de clase). Aqu una acotacin: EL MDULO DE CLASE NO DEBER CONTENER NINGN CDIGO, aunque pueden llamarlo como quieran. 6) El cdigo para el ejemplo es el siguiente Cdigo:
Option Explicit Public Function Increment(var As Integer) As Integer If Not IsNumeric(var) Then Err.Raise 5 Increment = var + 1 End Function Public Function Decrement(var As Integer) As Integer If Not IsNumeric(var) Then Err.Raise 5 Decrement = var - 1 End Function Public Function Square(var As Long) As Long If Not IsNumeric(var) Then Err.Raise 5 Square = var ^ 2 End Function

7) Deberemos colocar una funcin especial que es la que Windows inicializa cuando carga y descarga las DLL. A esto se le llama, Punto de Entrada o Entry Point. Esta funcin estar presente en TODOS nuestros proyectos de DLL. Ahora el cdigo queda as: Cdigo:
Option Explicit Public Public Public Public Const Const Const Const DLL_PROCESS_DETACH = 0 DLL_PROCESS_ATTACH = 1 DLL_THREAD_ATTACH = 2 DLL_THREAD_DETACH = 3

Public Function DllMain(hInst As Long, fdwReason As Long, lpvReserved As Long) As Boolean Select Case fdwReason Case DLL_PROCESS_DETACH ' No per-process cleanup needed Case DLL_PROCESS_ATTACH DllMain = True

Case DLL_THREAD_ATTACH ' No per-thread initialization needed Case DLL_THREAD_DETACH ' No per-thread cleanup needed End Select End Function Public Function Increment(var As Integer) As Integer If Not IsNumeric(var) Then Err.Raise 5 Increment = var + 1 End Function Public Function Decrement(var As Integer) As Integer If Not IsNumeric(var) Then Err.Raise 5 Decrement = var - 1 End Function Public Function Square(var As Long) As Long If Not IsNumeric(var) Then Err.Raise 5 Square = var ^ 2 End Function

8) Fjense que cada CASE se auto explica. All colocaremos lo que necesitamos realizar cuando se carga, descarga o se genera una recursividad de la clase. Cdigo:
Public Const DLL_PROCESS_ATTACH = 1 Public Const DLL_THREAD_ATTACH = 2 DLL Public Const DLL_THREAD_DETACH = 3 Dll recargada Public Const DLL_PROCESS_DETACH = 0 : Cuando un proceso carga la DLL : El proceso est recargando una :El proceso est descargando una :El proceso descarga la DLL

Por favor refiranse al documento original para profundizar un poco ms en esto. 9) Hasta aqu prcticamente no hay nada nuevo. Si compilramos nuestra dll, VB6 lo hara como una ACTIVEX normal. Lo que va a ocasionar que nuestro proyecto sea creado como una DLL Standard es la inclusin de un archivo .DEF en el directorio que contiene nuestro proyecto. 10) Si bien existen muchas formas de declarar las funciones al compilador, la creacin del .DEF se ha mantenido de la forma ms sencilla posible. Para hacerlo, solo deben abrir un archivo nuevo con el Notepad de Windows o cualquier otro editor de textos, incluir la declaracin de las funciones en l de la siguiente forma y guardarlo en el directorio de nuestro proyecto. La declaracin la deben hacer as :

NAME MathLib LIBRARY MathMod DESCRIPTION "Add-on Library of Mathematical Routines" EXPORTS DllMain @1 Increment @2 Decrement @3 Square @4 11) Aqu, MathLib es el nombre de la dll cuando se compila (por lo general debe ser el mismo nombre del proyecto), MathMod es el nombre del mdulo, en DESCRIPTION colocan la descripcin deseada y luego va el listado de las funciones incluidas en el mdulo EN ORDEN y numeradas con @n donde n es el nmero de orden. 12) Cuando compilen la dll, en nuevo Linker buscar el archivo .DEF y si lo encuentra lo compilar como una DLL Standard, sino lo har como una ACTIVEX comn. Ahora solo falta hacer un pequeo programa ejecutable para probar la DLL y demostrar como se declaran las funciones, que se hace por cierto tal cual se usan las API de Windows o cualquier librera estndar DLL. El cdigo para el programa de pruebas es el siguiente: En un mdulo declaramos lo siguiente: Cdigo:
Option Explicit Public Declare Function Increment Lib "C:\VBProjects\MathLib\mathlib.dll" ( _ value As Integer) As Integer Public Declare Function Decrement Lib "C:\VBProjects\MathLib\mathlib.dll" ( _ value As Integer) As Integer Public Declare Function Square Lib "C:\VBProjects\MathLib\mathlib.dll" ( _ value As Long) As Long

Y en una forma que deber contener 3 botones y 3 textboxes colocaremos este cdigo: Cdigo:
Option Explicit Private Sub cmdDecrement_Click() txtDecrement.Text = Decrement(CInt(txtDecrement.Text)) End Sub Private Sub cmdIncrement_Click()

txtIncrement.Text = Increment(CInt(txtIncrement.Text)) End Sub Private Sub cmdSquare_Click() txtSquare.Text = Square(CLng(txtSquare.Text)) End Sub Private Sub Form_Load() txtIncrement.Text = 0 txtDecrement.Text = 100 txtSquare.Text = 2 End Sub

Los nombres de los botones y los textboxes deben ser los siguientes: Textboxs: txtIncrement txtDecrement txtSquare Botones: cmdDecrement cmdIncrement cmdSquare Recuerden que en la creacin de este tipo de DLL, no podrn utilizar los elementos propios de VB o ACTIVEX, as es que debern estar claros de que se puede usar o no para la creacin de las funciones. Bueno, mucho ms es lo que se puede agregar aqui pero les voy a dejar solo con esta introduccin para que ustedes sigan con la investigacin propia. Por el momento espero que esto le sea muy til a ms de uno de ustedes pues es un tema muy dificil de encontrar en internet . Saludos, Marcelo.

Das könnte Ihnen auch gefallen