Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Ya se puede Crear Windows DLL con VB

Estas en el tema de Ya se puede Crear Windows DLL con VB en el foro de Visual Basic clásico en Foros del Web. Quiero trasmitirles a todos que ya se pueden crear Windows DLL( DLL DINAMICAS) CON VB para más información ir a la FAQ' pag 5...

  #1 (permalink)  
Antiguo 13/02/2006, 10:17
Avatar de VisualGuallabo  
Fecha de Ingreso: marzo-2005
Mensajes: 288
Antigüedad: 19 años, 1 mes
Puntos: 2
Ya se puede Crear Windows DLL con VB

Quiero trasmitirles a todos que ya se pueden crear Windows DLL( DLL DINAMICAS) CON VB para más información ir a la FAQ' pag 5
__________________
"No hay lenguaje de programación potente que sea inferior a otro semejante cuando existe un buen programador que lo defiende"

Yosvanis Cruz Alias VisualGuallabo
Ycruz
  #2 (permalink)  
Antiguo 13/02/2006, 10:58
Avatar de Beakdan  
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 22 años, 4 meses
Puntos: 7
Oye, hace varios años que se pueden hacer cosas como esa en VB. Pero además reemplazar funciones en tu aplicación VB con funciones hechas en VC++/ASM al momento de ligar el código objeto (busca información sobre el trabajo realizado por Robert Heinig), o incrustar ASM directamente en la aplicación (busca el trabajo de Paul Caton) y otras cosas "extrañas" más (sólo tienes que leer el libro de Bruce McKinney "HardCore Visual Basic").
Pero lo que no mencionas, es que, salvo por el desafío que implicaba hacerlo, no tiene mucha utilidad considerando que siempre tendrás la dependencia con el RunTime de VB.

*Corregí porque me equivoqué en un nombre...

Última edición por Beakdan; 13/02/2006 a las 12:51
  #3 (permalink)  
Antiguo 13/02/2006, 12:14
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
Como dice Beakdan, es fútil hacer DLLs (aunque se pueda haciendo vudú) con VB. Las DLLs se suelen hacer para modularizar partes de aplicaciones _muy grandes_ y no tener que recompilarlo cada vez, para fabricar plug-ins, para tener la potencia de ASM/C/C++ en otros lenguajes (como VB)... pero hacerlas en VB no le encuentro el sentido. Por otra parte, siguen sin ser "puras" DLLs, porque dependes del RunTime. Es decir, no son ejecutables por un Windows "a palo seco", mientras que las de C/C++ sí, porque no usan ningún runtime.

Tampoco serían ejecutables desde un emulador como Wine para Linux o para Mac.
  #4 (permalink)  
Antiguo 13/02/2006, 12:29
Avatar de VisualGuallabo  
Fecha de Ingreso: marzo-2005
Mensajes: 288
Antigüedad: 19 años, 1 mes
Puntos: 2
Grasias por la Información

Cita:
Pero lo que no mencionas, es que, salvo por el desafío que implicaba hacerlo, no tiene mucha utilidad considerando que siempre tendrás la dependencia con el RunTime de VB.
eso lo se pero para los programadores de Visual Basic si son de Utilidad. ya que como quiera tienen que usar el RunTime de VB.
__________________
"No hay lenguaje de programación potente que sea inferior a otro semejante cuando existe un buen programador que lo defiende"

Yosvanis Cruz Alias VisualGuallabo
Ycruz
  #5 (permalink)  
Antiguo 13/02/2006, 12:33
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
Cita:
Iniciado por VisualGuallabo
Grasias por la Información



eso lo se pero para los programadores de Visual Basic si son de Utilidad. ya que como quiera tienen que usar el RunTime de VB.
Bien, pero el problema reside en que en tu post en las FAQ's dices que "podrían ser usadas por otros lenguajes". No, sólo por aquél ordenador que tenga la RunTime, lo que implica que ningún otro lenguaje podrá usarlo "de por sí" al menos que instales el "pack VB".
  #6 (permalink)  
Antiguo 13/02/2006, 12:47
Avatar de VisualGuallabo  
Fecha de Ingreso: marzo-2005
Mensajes: 288
Antigüedad: 19 años, 1 mes
Puntos: 2
Cita:
Bien, pero el problema reside en que en tu post en las FAQ's dices que "podrían ser usadas por otros lenguajes". No, sólo por aquél ordenador que tenga la RunTime, lo que implica que ningún otro lenguaje podrá usarlo "de por sí" al menos que instales el "pack VB".
Mis disculpas por la mala comunicación, claro ase falta el Run Time de Vb.
El Guille en su Web es el que tiene ejemplos con otros lenguajes yo no los he probado pero seguro que deben funcionar cuando el los puso.

Pero creo que se puedan crear este tipo de dll en Vb es un adelanto o me equivoco.
__________________
"No hay lenguaje de programación potente que sea inferior a otro semejante cuando existe un buen programador que lo defiende"

Yosvanis Cruz Alias VisualGuallabo
Ycruz
  #7 (permalink)  
Antiguo 13/02/2006, 12:53
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
Cita:
Iniciado por VisualGuallabo
Pero creo que se puedan crear este tipo de dll en Vb es un adelanto o me equivoco.
jajaj claro hacer un instalador para una DLL

jajaja que incluya el Runtime de VB6 jaja

nos vemos..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila

Última edición por GeoAvila; 13/02/2006 a las 14:24
  #8 (permalink)  
Antiguo 13/02/2006, 13:16
Avatar de VisualGuallabo  
Fecha de Ingreso: marzo-2005
Mensajes: 288
Antigüedad: 19 años, 1 mes
Puntos: 2
Como quiera debes distribuir la Runtime si la aplicación esta hecha en Vb.
__________________
"No hay lenguaje de programación potente que sea inferior a otro semejante cuando existe un buen programador que lo defiende"

Yosvanis Cruz Alias VisualGuallabo
Ycruz
  #9 (permalink)  
Antiguo 13/02/2006, 14:04
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
Cita:
Iniciado por VisualGuallabo
Mis disculpas por la mala comunicación, claro ase falta el Run Time de Vb.
El Guille en su Web es el que tiene ejemplos con otros lenguajes yo no los he probado pero seguro que deben funcionar cuando el los puso.

Pero creo que se puedan crear este tipo de dll en Vb es un adelanto o me equivoco.
Vale ;)

Ya te han dicho que todo es posible. El problema es, ¿es útil? No encuentro utilidad a dividir un proyecto VB en varias DLLs... Y en extrañísimo caso de que programases un proyecto tan grande como para tener que dividirlo (cosa que dudo en VB), sería conveniente hacer las DLL en C/C++ o cualquier otro lenguaje que deje crearlas "de por sí".

Otro caso similar es el código que se auto-modifica él sólo en tiempo de ejecución. ¿Merece la complicación el poco rendimiento que pueda ofrecer? ¿Es útil?

Como curiosidad vale, pero nada más.
  #10 (permalink)  
Antiguo 13/02/2006, 14:07
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
Cita:
Iniciado por GeoAvila
claro hacer un instalador para una DLL

jajaja que incluya el Runtime de VB6 jaja

nos vemos..
Las DLLs "reales" no se instalan...

Simplemente se leen. Entiendo que no lo supieses, es típico que todo lo del VB haya que "registrarlo" y bobadas similares con los OCXs.
  #11 (permalink)  
Antiguo 13/02/2006, 14:13
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
Cita:
Iniciado por MaxExtreme
Vale ;)

Ya te han dicho que todo es posible. El problema es, ¿es útil? No encuentro utilidad a dividir un proyecto VB en varias DLLs... Y en extrañísimo caso de que programases un proyecto tan grande como para tener que dividirlo (cosa que dudo en VB), sería conveniente hacer las DLL en C/C++ o cualquier otro lenguaje que deje crearlas "de por sí".

Otro caso similar es el código que se auto-modifica él sólo en tiempo de ejecución. ¿Merece la complicación el poco rendimiento que pueda ofrecer? ¿Es útil?

Como curiosidad vale, pero nada más.
totalmente de acuerdo, no tenes que inventar el agua azucarada si ya existe, a menos que te vaya ser de mucha ayuda pero de lo contrario, mejor sería usar lo adecuado para ello si ya esta dado, en este caso te puse de broma un instalador para una DLL imaginate eso.. se puede pero en realidad vale la pena mejor hacelo todo en tu proyecto al fin cuando te lleves tu proyecto y lo instales en otra computadora el instalará el Runtime entonces cual es el sentido de quere hacer la DLL sin el runtime si de todas formas lo vas a necesitar el runtime para correr tu app de VB6 ... entonces no se adelanta nada..

nos vemos..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #12 (permalink)  
Antiguo 13/02/2006, 14:18
 
Fecha de Ingreso: abril-2005
Mensajes: 351
Antigüedad: 19 años
Puntos: 3
felizitaciones por el aporte VisualGuallabo, Como haces para compilar?

PD: Esta chever tu PC(la de la foto)
  #13 (permalink)  
Antiguo 13/02/2006, 14:22
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
Cita:
Iniciado por MaxExtreme
Las DLLs "reales" no se instalan...

Simplemente se leen. Entiendo que no lo supieses, es típico que todo lo del VB haya que "registrarlo" y bobadas similares con los OCXs.
YO sé que las DLL no se instalan y lo sé perfectamente, pero si hace una en VB tendrías que hacer un instalador que lleve el Runtime, para que te pueda correr lo que dije del instaladorr en en tono de burla porque así se debería de hacer... cosa que sería ridículo porque solo te funcionaría en computadoras que tienen instalado El Runtime de VB

nos vemos...
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #14 (permalink)  
Antiguo 13/02/2006, 14:28
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
Cita:
Iniciado por GeoAvila
YO sé que las DLL no se instalan y lo sé perfectamente, pero si hace una en VB tendrías que hacer un instalador que lleve el Runtime, para que te pueda correr lo que dije del instaladorr en en tono de burla porque así se debería de hacer... cosa que sería ridículo porque solo te funcionaría en computadoras que tienen instalado El Runtime de VB

nos vemos...
Completamente de acuerdo, mi comentario fue un apunte bromista, no con mala intención
  #15 (permalink)  
Antiguo 13/02/2006, 14:30
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 4 meses
Puntos: 53
Cita:
Iniciado por MaxExtreme
Completamente de acuerdo, mi comentario fue un apunte bromista, no con mala intención
jajaj ok ...
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #16 (permalink)  
Antiguo 13/02/2006, 14:35
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
Acabo de leer el artículo más por encima, y contemplándolo bien, lo que hace no es nada "extraño". Usa el compilador y demás utilidades tal y como se suelen usar (línea de comandos), desde la cual permite crear a partir de módulos .bas DLLs, al igual que se hace con un fuente de C .c o C++ .cpp.

Es decir, no hay nada que no se lleve haciendo años con otros lenguajes, salvo "engañar" para que admita los archivos objeto que deja el compilador de VB en vez de los de C/C++.
  #17 (permalink)  
Antiguo 13/02/2006, 14:42
Avatar de VisualGuallabo  
Fecha de Ingreso: marzo-2005
Mensajes: 288
Antigüedad: 19 años, 1 mes
Puntos: 2
Cita:
Iniciado por LeandroA
felizitaciones por el aporte VisualGuallabo, Como haces para compilar?
Lo que tienes que aser es crear un proyecto DLL ActiveX.
eL MODULO DE CLASE LOS DEJAS COMO ESTA. Y EN UN MODULO publicas las funciones que quieres que tengan las dll.

el ejemplo de Ron en el modulo.

Cita:
Iniciado por Codigo
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
luego carga el proyecto con mi programa.
marca el modulo y luego las funciones oprocedimientos que quieres exportar.
Recuerda buscar la ruta donde se encuentra el exe de Vb en caso de Vb6(Vb6.exe)
y luego manda a compilar la dll te la creara en el directorio del proyecto.
luego la llamas con Declare como a las api de windows.

Te recomiendo que leas los articulos que menciono en la faq'
__________________
"No hay lenguaje de programación potente que sea inferior a otro semejante cuando existe un buen programador que lo defiende"

Yosvanis Cruz Alias VisualGuallabo
Ycruz

Última edición por VisualGuallabo; 13/02/2006 a las 14:47
  #18 (permalink)  
Antiguo 13/02/2006, 14:47
 
Fecha de Ingreso: abril-2005
Mensajes: 351
Antigüedad: 19 años
Puntos: 3
Hola te queria hacer una pregunta referente a crear una funcion con la dll para guardar un dato en un txt
por ejemplo

en la dll creo esta funcion

Clave:

Public Function imprimir(ByVal dato As String)
Open "C:\prueva.txt" For Output As #1
Print #1, dato
Close #1
End Function



y en mi proyecto la llamo de esta forma:
Clave:

Private Declare Function imprimir Lib "Prueba.dll" (ByVal dato As String)

Private Sub Command1_Click()
imprimir "hola mundo"
End Sub


pero en prueva.txt me guarda ?????????

como puedo hacer para combertirlo en string

Saludos
  #19 (permalink)  
Antiguo 13/02/2006, 23:11
 
Fecha de Ingreso: abril-2005
Mensajes: 351
Antigüedad: 19 años
Puntos: 3
Hola lo solucione de esta forma nose si sera la correcta pero creo que anda bien


En la dll:
Cita:

Option Explicit

Public Function Saludo() As String
Saludo = "Hola desde la DLL Prueba"
End Function
Public Function imprimir(ByVal dato As String)
Open "C:\Favoritos.txt" For Output As #1
Print #1, StrConv(dato, vbUnicode)
Close #1
End Function
y en mi proyecto

Cita:

Option Explicit
Private Declare Function Saludo Lib "Prueba.dll" () As String
Private Declare Function imprimir Lib "Prueba.dll" (ByVal dato As String)

Private Sub cmdSaludo_Click()
MsgBox StrConv(Saludo, vbFromUnicode)
End Sub

Private Sub Command1_Click()
imprimir "hola mundo"
End Sub
  #20 (permalink)  
Antiguo 14/02/2006, 07:42
Avatar de VisualGuallabo  
Fecha de Ingreso: marzo-2005
Mensajes: 288
Antigüedad: 19 años, 1 mes
Puntos: 2
Mira de esta forma te ahoras codigo.

en la dll creo esta funcion
Clave:

Public Function imprimir(ByVal dato As Variant)
Open "C:\prueva.txt" For Output As #1
Print #1, dato
Close #1
End Function



En tu proyecto.

Private Declare Function imprimir Lib "Prueba.dll" (ByVal dato As Variant)

Private Sub Command1_Click()
imprimir "hola mundo"
End Sub
__________________
"No hay lenguaje de programación potente que sea inferior a otro semejante cuando existe un buen programador que lo defiende"

Yosvanis Cruz Alias VisualGuallabo
Ycruz
  #21 (permalink)  
Antiguo 14/02/2006, 07:45
Avatar de VisualGuallabo  
Fecha de Ingreso: marzo-2005
Mensajes: 288
Antigüedad: 19 años, 1 mes
Puntos: 2
Leandro ya sabes trabajar con mi programa.?
__________________
"No hay lenguaje de programación potente que sea inferior a otro semejante cuando existe un buen programador que lo defiende"

Yosvanis Cruz Alias VisualGuallabo
Ycruz
  #22 (permalink)  
Antiguo 14/02/2006, 07:45
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
Un consejo: Nunca declares As Variant, y mucho menos si eso tiene que pasar entre DLLs...
  #23 (permalink)  
Antiguo 14/02/2006, 07:49
Avatar de VisualGuallabo  
Fecha de Ingreso: marzo-2005
Mensajes: 288
Antigüedad: 19 años, 1 mes
Puntos: 2
Por que max?
__________________
"No hay lenguaje de programación potente que sea inferior a otro semejante cuando existe un buen programador que lo defiende"

Yosvanis Cruz Alias VisualGuallabo
Ycruz
  #24 (permalink)  
Antiguo 14/02/2006, 07:59
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
De manera general, usar el tipo Variant es malo. ¿Por qué? Fácil. ¿Qué es Variant? ¿Es un tipo? No, es una mezcla que junta todos los tipos normales.

Pero el problema de esto es que nunca sabes que hay dentro de un Variant... ¿Es un número entero? ¿Es texto? ¿Son datos? ¿Es una imagen? ¿Es un número decimal? Con Variant no puedes establecer qué quieres y cómo quieres. Quizás tus operaciones sean con enteros y no con decimales... Quizás un 3 quieras que sea texto y no el caracter ASCII 3.

¿Qué diferencia hay entre "3", "3" y "3"? Uno es un número, otro una cadena, otro un flotante. ¿Cómo sabe Visual Basic que necesitas hacer con él? ¿O como lo saben otras funciones? Por otro lado, el uso de Variant impide sobrecargar funciones (VB no tiene esta característica) y limita mucho la POO.

En teoría, además, el tipo Variant es más lento y ocupa más espacio que cualquier otro porque trata de "almacenar" todo a la vez...

A pesar de todos los problemas, usarlo entre DLLs es aún peor. Una DLL de C++ nunca podrá recibir un tipo Variant, ni de cualquier otro lenguaje, porque es como un objeto, no un dato concreto. Si quieres mandar/recibir un número, ¿por qué no pones As Integer? Todos los lenguajes lo entenderán.
  #25 (permalink)  
Antiguo 14/02/2006, 08:09
Avatar de VisualGuallabo  
Fecha de Ingreso: marzo-2005
Mensajes: 288
Antigüedad: 19 años, 1 mes
Puntos: 2
Gracias Max por tu gran explicación.
Por casualidad no sabes como crear los archivo *.obj de Vb desde codigo.
__________________
"No hay lenguaje de programación potente que sea inferior a otro semejante cuando existe un buen programador que lo defiende"

Yosvanis Cruz Alias VisualGuallabo
Ycruz
  #26 (permalink)  
Antiguo 14/02/2006, 08:26
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
De nada, espero haberte convencido.

No soy aficionado a VB ni lo he usado desde hace mucho tiempo, lo que sí te diré es que deberías usar el compilador normal, es decir, como explica el autor del artículo que has puesto aquí, debes ir a una consola y allí llamar al compilador de VB. Se llaman C2.exe y LINK.exe según el artículo:

Cita:
Along with VB6.EXE, the Visual Basic executable that defines the Visual Basic environment, we can also find C2.EXE and LINK.EXE, which are a compiler and a linker, respectively. Their presence in this directory suggests that VB6.EXE itself does not handle the generation of a DLL file, but that at some point in the compilation process, it calls these programs.
A partir de ahí (en la página 2), te explica cómo usarles.
  #27 (permalink)  
Antiguo 14/02/2006, 08:36
Avatar de VisualGuallabo  
Fecha de Ingreso: marzo-2005
Mensajes: 288
Antigüedad: 19 años, 1 mes
Puntos: 2
Si claro eso ya me lo habia leido pero me refiero como crear los *.Obj de Vb
con el c2.exe que es el que los ase pero desde otra aplicación sea cual sea el lenguaje c++ c vc++ Delphi o Vb. es decir aserlos usando el c2.exe pero desde un programa hecho por mi. o si sabes de algun programa de consola que sea capas de crear dichos Objetos al pasarle como parametros los formularios, las clases y modulos.
__________________
"No hay lenguaje de programación potente que sea inferior a otro semejante cuando existe un buen programador que lo defiende"

Yosvanis Cruz Alias VisualGuallabo
Ycruz
  #28 (permalink)  
Antiguo 14/02/2006, 10:47
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
Cita:
Iniciado por VisualGuallabo
Si claro eso ya me lo habia leido pero me refiero como crear los *.Obj de Vb
con el c2.exe que es el que los ase pero desde otra aplicación sea cual sea el lenguaje c++ c vc++ Delphi o Vb. es decir aserlos usando el c2.exe pero desde un programa hecho por mi. o si sabes de algun programa de consola que sea capas de crear dichos Objetos al pasarle como parametros los formularios, las clases y modulos.
No entiendo, el c2.exe y el link.exe es precisamente lo que deberían hacer...

¿A qué te reiferes como desde otra aplicación de C/C++, Delphi, VB...?
  #29 (permalink)  
Antiguo 14/02/2006, 11:13
Avatar de VisualGuallabo  
Fecha de Ingreso: marzo-2005
Mensajes: 288
Antigüedad: 19 años, 1 mes
Puntos: 2
el c2.exe -Crea los Objetos
el link.exe los enlaza y crea el exe o dll o ocx.

Quiero aser un programa que con la ayuda del c2.exe me cree los *.Obj de un proyecto de Vb
__________________
"No hay lenguaje de programación potente que sea inferior a otro semejante cuando existe un buen programador que lo defiende"

Yosvanis Cruz Alias VisualGuallabo
Ycruz
  #30 (permalink)  
Antiguo 14/02/2006, 11:51
 
Fecha de Ingreso: abril-2005
Mensajes: 351
Antigüedad: 19 años
Puntos: 3
Cita:
Iniciado por VisualGuallabo
Leandro ya sabes trabajar con mi programa.?
si esta muy bueno, es mucho mas sensillo usando el programa

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:59.