DLL Que me genera un error al ejecutar una funcion

733 views
Skip to first unread message

Malosito

unread,
May 10, 2009, 11:02:37 AM5/10/09
to Mundo Visual FoxPro
Antes que nada un gran saludo para todos los participantes de este
foro, me dirijo a ustedes con la finaludad de hacerles una consulta,
porque tengo tiempo tratanto de resolver un problema y no he tenido
exito.

El problema consiste en lo siguiente:

Dias atras, me consegui con una publicación que hizo el amigo Guille,
donde el explica paso a paso la forma de hacer una libreria en VB6 que
funcione con cualquier lenguaje de programación(librerias normales) y
de hecho hace un ejemplo que funciona de las mil maravillas.

Entonces yo vengo y diseño una funcion sencilla que posteriormente
sera utilizada con VFP9.

El codigo de dicha función en VB6 es el siguiente:


Option Explicit

Public Function Serial(ByVal Cadena As String) As String
Dim t As Double
Dim j As Integer
Dim Texto As String
Dim nLetra As Integer

Texto = Trim(Cadena)

nLetra = 0
t = 0
j = 1

For j = 1 To Len(Texto)
nLetra = Asc(Mid(Texto, j, 1))
t = t + nLetra
Next

t = Str(((t * 14) + 14) / Len(Texto))

Serial = t

End Function

En foxpro yo declaro la función de la libreria con la siguiente
instrucción:

DECLARE STRING Serial IN GenFer.DLL STRING

donde el primer STRING es el valor que la función retorna y el segundo
STRING es el valor que se le pasa a la funcion.

Y para Ejecutar la funcion hago lo siguiente:

xCadena = Serial("ESTA ES UNA PRUEBA")

esta instrucción deberia devolverme en la variable xCadena un numero
en formato string y en lugar de eso me retorna uno de estos dos
errores siguientes:

1.) NO SE PUEDE CARGAR LA DLL DE 32 BITS
2.) UNA LLAMADA DECLARE A DLL HA PRODUCIDO UNA EXCEPCION.

Si alguno de los presentes foristas sabe o conoce el motivo por el
cual me arroja esos errores agradeceria me dijeran para saber cual es
mi falla.

Y si el error es muy tonto entonces disculpen tanta ignorancia de mi
parte.

Sin mas nada a que hacer referencia me despido de ustedes espeando un
respuesta satisfactoria.

Mi correo personal es: jafj...@hotmail.com

El Malosito

Carlos Miguel FARIAS

unread,
May 10, 2009, 8:11:47 PM5/10/09
to mundovis...@googlegroups.com
Estimado...
No soy un experto en VB6 pero....
a) Declaras que Serial devuelve un string, pero en realidad le asignas para que devuelva un double (Es válido eso?), como indicas option explicit, no debería haber ni compilado en VB6.
b) la función STR devuelve una cadena, pero se lo estas asignando a variable (t) declarada como double, que es un dato numerico de punto flotante (compila eso con option explicit?).
c) Creo que estas usando t como variant (antes del bucle le asignas 0), y luego en el bucle lo trabajas como numerico, y luego como dije en b) le asignas texto (string).
Revisa eso, no creo que sea un problema de VFP, si no de la función en VB6.
Y mi gran duda, es para que usar VB6 para hacer algo que VFP puede resolver con sus propias funciones, salvo que sea por curiosidad de aprendisaje, ademas estás creando una complejidad de la aplicación, ya que toda dll que utilizas, debe ser "instalada" en las máquinas que usan tu programa (en la máquina que se compilan, se instalan automaticamente).
Saludos: Miguel

El Malosito Malosito

unread,
May 10, 2009, 9:50:18 PM5/10/09
to mundovis...@googlegroups.com
Amigo carlos miguel FARIAS, dicha funcion si funciona y es compilada por VB6.
 
Y en efecto hago eso para efectos de aprendizaje porque nunca se sabe cuando se va a necesitar de esos casos.
 
si tu copias dicha funcion y la copias en un ejmplo que tu gustes y corres la funcion entonces te daras de cuenta que todo marcha como debe de ser.
 
Y si como funcion normal de VB6 funciona entonces no me explico porque dentro de una dll no funciona?
 
Entonces es hay donde esta mi duda y es el motivo por el cual recurro a mis amigos gurus del foro.
 

Date: Sun, 10 May 2009 21:11:47 -0300
Subject: [Mundo Visual FoxPro] Re: DLL Que me genera un error al ejecutar una funcion
From: carlosmig...@gmail.com
To: mundovis...@googlegroups.com

roberto aaron delgado

unread,
May 11, 2009, 10:45:45 AM5/11/09
to mundovis...@googlegroups.com
Hola malosito

Hace 5años me entró la curiosidad sobre las DLLs.

En VisualBasic5 y 6 genera DLLs del tipo ActiveX, ahora no averigué si
vb6 genera DLLs nativos para el SO, por lo general las librerias
nativas solo requieren el Kernel32.dll, User32.dll y el Gdi32.dll.
Claro que si usas mas servicios como Sockets tu Dll necesitrá el
WSock32.dll. Yo recuerdo haber creado DLLs con Delphi3, VBasic6; ahora
con Delphi me permitía crear DLLs Nativos y podia ser llamado o
utilizado desde VBasic6 asi como VFox6. En cambio con VBasic6 creaba
dlls de tipo ActiveX y solo podia ser llamado desde VBasic6.

Ahora depende de tu trabajo que desarrolles pero recomendaría crearlos
en Delphi asi como C++.

Saludos de Peru...

El 11/05/09, El Malosito Malosito <jafj...@hotmail.com> escribió:
>
> Amigo carlos miguel FARIAS, dicha funcion si funciona y es compilada por
> VB6.
>
>
>
> Y en efecto hago eso para efectos de aprendizaje porque nunca se sabe cuando
> se va a necesitar de esos casos.
>
>
>
> si tu copias dicha funcion y la copias en un ejmplo que tu gustes y corres
> la funcion entonces te daras de cuenta que todo marcha como debe de ser.
>
>
>
> Y si como funcion normal de VB6 funciona entonces no me explico porque
> dentro de una dll no funciona?
>
>
>
> Entonces es hay donde esta mi duda y es el motivo por el cual recurro a mis
> amigos gurus del foro.
>
>
>
> _________________________________________________________________
> Discover the new Windows Vista
> http://search.msn.com/results.aspx?q=windows+vista&mkt=en-US&form=QBRE
> >
>
Reply all
Reply to author
Forward
0 new messages