border

Miembros:
Mensajes:
Temas:
Online:

Ultimo Miembro:

 
 

  #1 (permalink)  
Antiguo 30-06-2004, 01:00:00
Avatar de buligan
Un Nuevo Amigo
 
Registrado: nov 2003
Posts: 29
buligan Valoración +2
Predeterminado Implementar una función en una DLL

Implementar una función en una DLL

Hola de nuevo

Yo siempre preguntando ... a ver cuándo soy capaz de resolver la duda de alguien.

Para los instaladores utilizo InstallShield, el cual en un momento dado permite agregar un fichero DLL con una función que valide el número de serie que introduce el usuario. Incorporan algún ejemplo, pero en C++.

¿se puede hacer esa DLL en VB?

veo que puedes crear un proyecto de Activex DLL, pero creo que luego hay que exportar la función. La verdad es que no sé muy bien por dónde empezar y la ayuda no me está resultando de utilidad

¿algún consejo?

gracias</TR>
Responder Con Cita
  #2 (permalink)  
Antiguo 30-06-2004, 01:00:00
Moderador
 
Registrado: dic 2002
Ubicación: Madrid
Posts: 4.266
acalanto ha deshabilitado la reputación
Predeterminado RE: Implementar una función en una DLL

RE: Implementar una función en una DLL

Las ActivexDLL son librerías dinámicas casi como puede serlo una DLL escrita en C++. La única diferencia con estás últimas es que VB gestiona el registro del componente y de las clases que la componen en el registro de Windows, formando sistemáticamente un pequeño lio en el mismo si pasas por alto el más mínimo detalle de diseño.

Cuando generes un ActivexDLL te aparecerá en las referencias de proyecto y podrás utilizar las clases y procedimientos públicos desde cualquier aplicación.

Si estás pensando en usar esta tecnología, e independientemente de la opinión que algún otro usuario pueda proporcionarte, te aconsejo, si te resulta posible, que desarrolles comoponentes en un equipo independiente y las registres y desregistres manualmente en el que desarrolles la aplicación. De esta forma el registro de windows que sufrirá las consecuencias será el de componentes y no el de desarollo.

Una alternativa sería los componentes Activex EXE cuyo registro gestionan ellos mismos aunque resultan algo más lentos en la implementación. (Una vez cargado en memoria son tan rápidos y eficaces como la DLL)


Espero haberme explicado y que te resulte de utilidad

Un saludo
-Acalanto-</TR>
__________________
Un cordial saludo
-Acalanto-

Madrid - España

Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
  #3 (permalink)  
Antiguo 30-06-2004, 01:00:00
Avatar de buligan
Un Nuevo Amigo
 
Registrado: nov 2003
Posts: 29
buligan Valoración +2
Predeterminado RE: Implementar una función en una DLL

RE: Implementar una función en una DLL


Lo de usar una DLL es porque InstallShield es lo que pide. Te da la opción de darle una DLL, el nombre de una función de esa DLL y el valor que devuelve cuando valida correctamente el Serial Number

Así que tendré que programar una DLL con una función que dado un string devuelva, por ejemplo, 1 o -1 según el SN sea correcto o no.

La pega que tengo es que me da el siguiente error al llamarlo desde InstallShield:

"Can not find the entry point of function ValidateSN, make sure it is exported"

Desde otro proyecto de VB he probado y no tiene ninguna pega, llamo a ValidateSN y funciona.

¿?

saludos</TR>
Responder Con Cita
  #4 (permalink)  
Antiguo 30-06-2004, 01:00:00
Buena Participación en el Foro
 
Registrado: mar 2004
Posts: 36
aamartin2k Valoración +2
Predeterminado RE: Implementar una función en una DLL

RE: Implementar una función en una DLL

Verás, no soy experto en DLLs ni en C++, pero ese mensaje indica un conflicto. Las DDLs creadas con C exportan funciones, es decir, ponen a disposición de programas clientes una vía para realizar llamadas a funciones contenidas en dichas DLLs. Las funciones se pueden llamar por nombre o por número (ordinal). Sin profundizar en las formas de llamado y enlace, y demás complejidades del C, en ese proceso solo intervienen el programa cliente y la DLL.

Las DLL de automatización creadas en VB, por mucho que lo parezcan, no se comportan igual a las anteriores. Para que un programa cliente pueda usar código de una DLL ActiveX, debe crear un objeto a partir de una clase pública contenida en la DLL, y después ejecutar métodos de dicho objeto. Como su nombre lo indica, las DLL ActiveX emplean Automatización ActiveX, que antes fué Automatización COM. COM se basa en una jerarquía de clases a partir de la interfaz IUnknown. Lo que se deriva de todo esta cháchara es que se requiere trabajar con objetos (e interfaces COM, aunque lo ignoremos) para emplear una DLL de Basic.

Es evidente que el InstallShield trata de hacer una llamada directa a la función dentro de la DLL, y se queja al no poder encontrar el EntryPoint. Si la DLL estuviera programada en C y exportara dicha función no habría problemas. Al llamar a la DLL desde otro proyecto VB no hay problemas, se emplea ActiveX sin darnos cuenta.

Para quienes deseen profundizar sobre el tema y emplear algunos trucos para "dar la vuelta" a situaciones como esta les recomiendo el libro Hardcore Visual Basic, de Bruce McKinney. Está incluido en el MSDN. En el explica como crear DLLs con objetos globales, que no necesitan instanciarse explícitamente para ser llamados, pero creo que en este caso no aplica, porque el cliente (InstallShield) no es VBy por ende, no debe emplar COM.

Espero no haberlos mareado mucho, aamartin</TR>
Responder Con Cita
  #5 (permalink)  
Antiguo 30-06-2004, 01:00:00
Avatar de J.M.Movilla
Administrator
 
Registrado: dic 2002
Ubicación: BURGOS - ESPAÑA
Posts: 5.404
J.M.Movilla Valoración +2
Predeterminado RE: Implementar una función en una DLL

RE: Implementar una función en una DLL

Amigo aamartin: Usted sí que sabe... No es la primera vez que manifiesto mi admiración por tus conocimientos y las magistrales formas de exponerlos... Espero seguir mucho tiempo admirándote y agradeciendo tus colaboraciones.
__________________
José María Movilla Cuadrado
______________________

Visual Basic Videos Programacion Foro Programacion
Tutoriales Programacion Trucos Programacion Codigos Programacion
Responder Con Cita
  #6 (permalink)  
Antiguo 30-06-2004, 01:00:00
Buena Participación en el Foro
 
Registrado: mar 2004
Posts: 36
aamartin2k Valoración +2
Predeterminado RE: Implementar una función en una DLL

RE: Implementar una función en una DLL

Inmerecido su elogio, maestro. Trato con humildad de ayudar a los colegas, y evitar que incurran en nuestros errores. Según Oscar Wilde, eso es la experiencia, una larga colección de errores... Además, no me gusta dar respuestas "de cátedra"sin ofrecer solución, pero creo que en este caso no hay otra...

saludos y sigamos colaborando,

aamartin</TR>
Responder Con Cita
  #7 (permalink)  
Antiguo 17-09-2004, 01:00:00
Avatar de buligan
Un Nuevo Amigo
 
Registrado: nov 2003
Posts: 29
buligan Valoración +2
Predeterminado RE: Implementar una función en una DLL

RE: Implementar una función en una DLL


Realmente impresionante la explicación, menos mal que no eres experto. Está claro que tengo que seguir aprendiendo muchas cosas antes de poder ser parte activa en este foro

Pues visto lo que hay, programaré la función en C++, me fastidia por el hecho de trabajar en dos lenguajes distintos dentro del mismo proyecto pero no le veo mucha complicación.

El propio InstallShield incluye los fuentes para crear la función con lo que sólo hay que programar el contenido de manera que valide el string del SN según mi algoritmo.

Muchas gracias, un saludo.

</TR>
Responder Con Cita
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are habilitado
Pingbacks are habilitado
Refbacks are habilitado


Temas Similares
Tema Autor Foro Respuestas Último Mensaje
ejecutar funcion vb desde funcion javascript josu ASP.NET 0 08-05-2006 11:19:37
Implementar PHP 5 csaldana1981 PHP 1 31-03-2006 22:41:58
implementar grafos. sakuragi Visual Basic.NET 2003 & 2005 0 04-10-2005 05:40:18
Implementar la función Nz de Access xsara1_9 Visual Basic 6.00 2 29-09-2004 09:54:52
implementar un componente panel en vb carlosart ComponentONE Suite 3 17-09-2004 01:00:00


La franja horaria es GMT. Ahora son las 19:30:08.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
A vBSkinworks Design

Alojado en el servicio Premium de Masquewebs | Diseño mejorado por MasqueWebs

right