Acerca de las DLL


([N4] arturomiranda) #1

Hola a todos mi pregunta es la siguiente:

las DLL, tienen las mismas reglas de uso que en la V6, sobre todo con el manejo de punteros y parametros por referencia??


([N3] leonel1284) #2

@Arturomiranda.gmail te comento, asi es... sino mal recuerdo en velneo 6 no puedes pasar parametros por referencia o punteros a las librerias externas, cuando requieres que la funcion de la dll te retorne mas de un valor, lo que yo hago es que me apoyo en el registro de windows (en velneo 6), en la version 7 podrias hacer lo mismo, pero tendrias que verificar si las dll de windows funcionan en linux o mac (en caso de que tu aplicacio sea multiplataforma) o por lo menos hacer el equivalente de esa dll para las otras plataformas, debes de tomar en cuenta que las librerias externas no van a funcionar si las ejecutas en los procesos en el servidor, solo funcionan en el lado cliente, por lo tanto tienes que descargar las librerias a cada cliente y registrarlas en windows o por lo menos ponerlas en la carpeta de system32.

Te dejo este enlace: http://velneo.es/info_v7_74_es/general/asistente_de_formulas/funciones_de_dll/

A mi solo me queda una duda:
¿Como subo mi dll al vServer? He notado en el proyecto de Business Center, que en la primera ejecucion se descargan las dll y se registran en windows, pero no encuentro la opcion en el vDevelop. Si tienes info, pasame el link por fas.

Saludos!!


([N1] Roberto Blasco) #3

Hola leonel.riveroll.gmail

Siento no estar de acuerdo con lo que dices en el siguiente punto

debes de tomar en cuenta que las librerias externas no van a funcionar si las ejecutas en los procesos en el servidor, solo funcionan en el lado cliente, por lo tanto tienes que descargar las librerias a cada cliente y registrarlas en windows o por lo menos ponerlas en la carpeta de system32

Las librerías SÍ que funcionan del lado del servidor, otra cosa es que se utilice como base un objeto COM dentro de la librería ya que estos no aceptan multihilo en su instancia dentro de la compilación. Las dlls no se registran, se registran los compontetes COM y ActiveX. Para que una dll funcione sólo tiene que ser accesible por el sistema, es decir, estar en la ruta donde se ejecuta el programa que las utiliza o en el path del sistema.

Un saludo. Roberto Blasco.


([N3] leonel1284) #4

@Roberto Blasco...

Es correcto, tienes toda la razon, he hecho la prueba y efectivamente mi dll no se registra en windows envia un mensaje de error acerca de que no se encontro el punto de entrada.

Con respecto a lo que comente de si funcionan o no en el servidor, lo que pasa es que eso entendi del enlace que pegue, al final de la publicacion hay una Advertencia.

ATENCIÓN: Con el fin de garantizar tanto la estabilidad como la seguridad de Velneo vServer V7 el acceso a librerías externas desde procesos ésta permitido solamente en procesos ejecutados en primer o segundo plano (ejecución en cliente), no siendo posible hacer llamadas a librerías externas desde procesos ejecutados en tercer plano (en el servidor).

Entonces ya me confundi... Puedes explicar un poco mas del porque si se puede en el vserver? Honestamente no lo he hecho en el servidor.
Saludos.


([N1] Roberto Blasco) #5

@leonel.riveroll.gmail

ATENCIÓN: Con el fin de garantizar tanto la estabilidad como la seguridad de Velneo vServer V7 el acceso a librerías externas desde procesos ésta permitido solamente en procesos ejecutados en primer o segundo plano (ejecución en cliente), no siendo posible hacer llamadas a librerías externas desde procesos ejecutados en tercer plano (en el servidor).

No voy a ser yo el que refute lo dicho por los desarrolladores de v7. Pero si el comportamiento de las dlls es igual que en la v6 no tendría porqué haber ningún problema en ejecutar funciones de una librería en tercer plano.
Evidentemente si la función requiere la atención del usuario, no es pertinente utilizar ésta del lado del servidor.

Un saludo. Roberto Blasco.


([N4] arturomiranda) #6

muchas gracias leo, roberto

saludos


([N2] bannu) #7

Me vas a disculpar Roberto, pero las DLL en v6, no se ejecutan en el servidor, entre otras cosas porque es el IRunner el que las carga, vamos que están cargadas en el lado del cliente, no en el servidor.


([N1] Roberto Blasco) #8

@sonovision.telecable

Disculpado de antemano :-)

Primero decir que lo mismo este no es el foro adecuado para discutir sobre las bondades de v6, que me perdonen los puristas ...

Pero me temo que voy a discrepar de nuevo. Cuando digo que las dlls SÍ funcionan del lado del servidor me refiero a que pueden ser llamadas desde procesos realizados en tercer plano (ejecutados del lado del servidor) y por supuesto pueden ejecutarse por demonios (sin necesidad de cliente alguno conectado - iRunner).

Un saludo. Roberto Blasco


([N2] bannu) #9

Pues ya me dirás como haces, o que versión utilizas, la mía es la 6.4.1 y el servidor no puede llamar a ninguna DLL, y estoy hablando directamente, no de un proceso que llame a un script o similar.

Si te fijas en la ventana de creación de los demonios tampoco te permite insertar funciones de DLL, se pueden copiar y pegar desde otro proceso pero no funcionan, al menos a mí no.

[attachment=20525,1628]


([N4] velavisual) #10

@sonovision.telecable
.
.
Buenos días, siento meterme donde no me llaman, pero me picó la curiosidad y me arrasqué:
.
.
.
saludos
Antonio Vela
http://www.velavisual.com

[attachment=20526,1629]


([N2] bannu) #11

SI pero sigue sin llamar a la DLL, lo del gráfico fué un fallo del directo, los procesos normales tampoco muestran el icono de las funciones directamente.


([N1] Roberto Blasco) #12

@sonovision.telecable

Espero que este ejemplo pueda ayudarte.

El ejemplo lo único que hace es dar de alta en la base de datos a través de un demonio un cadena aleatoria de 128 bytes en base64 a través de una dll que he compilado para Windows.

Un saludo. Roberto Blasco.

[attachment=20547,1632]


([N2] bannu) #13

Gracias por tu interés Roberto, el caso es que la demo que has puesto si funciona, pero las DLL que yo intento ejecutar desde el servidor no rulan, de ahí la confusión, no sé exactamente el motivo, ya había intentado hace tiempo ejecutar DLL en el servidor:

http://forum.velneo.com/es/viewtopic.php?p=77890&highlight=#77890

Como no ejecutaba la DLL supuse que no se podía desde el servidor, lo intentaré de nuevo, gracias.


([N1] Roberto Blasco) #14

@sonovision.telecable

Puede ser que no llames de forma correcta a la dll o que las funciones que ésta tenga no estén exportadas. Si tienes algún problema con una dll en particular envíamela y te diré si son "utilizables" por Velneo en 1er y/o 3er plano.

Un saludo. Roberto Blasco.


([N2] bannu) #15

Las DLLs funcionan perfectamente, las utilizo desde hace bastante tiempo, la convención de llamada es "_stdcall" y todas las funciones están exportadas, de no ser así no se podrían llamar desde Velneo, como te he dicho funcionan perfectamente, la que me interesa ejecutar en el servidor es una en particular que exporta los informes en html, creo que el problema va a estar en que utiliza un ActiveX ( registradado correctamente), no tengo problemas con la programación de DLLs ( vengo de c++), vamos que no soy nuevo en esto, aunque agradezco tu ofrecimiento, por eso he elegido v6 y sigo a la expectativa con V7, la comunidad y en especial las personas como tú, son las que inclinan la balanza siempre a favor de esta herramienta, un saludete.

www.bitcodesoft.com/pluggins/


([N1] Roberto Blasco) #16

@sonovision.telecable.

Efectivamente, cuando he utilizado activex en mis dlls, éstas no han funcionado en tercer plano. Si puedes utilizar la dll, lib ó .a en vez del activex mucho mejor, en caso contrario tendrás que hacerlo a través de vbs.

Un saludo. Roberto Blasco.

P.D.
No te fies mucho de mi en cuanto al peso de la balanza en v7, ya he dicho muchas veces que soy completamente lego en la materia :-)