Sin embargo te comento que con Python, Ruby, Perl, e incluso C++ podrías crear una aplicación multiplataforma que se ejecute bien en ambos sistemas, tal vez incluso mejor que con Java. En el caso de C++ la diferencia sería que tendrías que compilar un ejecutable por separado para cada plataforma, mientras que con lenguajes interpretados como los que te mencioné, la metodología es Write Once, Run Anywhere.
Te recomiendo determinar primero para qué necesitas esos DLLs, y luego buscar algún wrapper que los sustituya. Ejemplo: Qt crea ventanas para Windows, Linux y Mac, pero el código subyacente siempre depende de la plataforma en la cual se ejecuta el sistema.
_______________________________________________
l-desarrollo mailing list
l-desa...@velug.org.ve
http://listas.velug.org.ve/mailman/listinfo/l-desarrollo
Pienso que la respuesta depende principalmente del tipo de dll del cual se trate.
Si el dll en cuestión es una librería dinámica estándar de windows puedes acceder mediánte el uso de Java Native Interface(JNI) o Java Native Access(JNA)[1]. Para ambos casos hay q generar un envoltorio o wrapper que encapsule las llamadas a las funciones del dll. El primero no lo recomiendo por q obligatoriamente hay q generar el wraper en C++ y es algo complicado. El segundo es mucho mas directo y hay utilidades q permiten la automatización del wrapper partiendo de un header de C.
En cualquiera de los casos anteriores necesitas el header en c. Si no lo tienes debes reconstruirlo a mano de las llamadas extern de VB. No hay mas opción.
Si los dlls son enamblados .net estas de suerte por q seria muy trivial utilizarlos usando Mono y exponiéndolos a java.
Si el dll en cuestión es un dll tipo COM o activex hay q generar un wrapper usando el compilador java de microsoft. Desconozco si hay otras opciones.
Ahora bien, dado que dices q esos dlls son muy específicos de windows no se si te refieres a que son los dlls estándar o core de windows(user,kernel,gdi,etc) en cuyo caso supongo q podrás utilizar los q vienen con wine.
Si se trata de drivers debes buscar sus respectivas versiones para linux y utilizar esos.
Como todo tiene solución menos la muerte, siempre podrás, en ultima instancia, dejar tus dlls dentro de una maquina virtual, crear los wrappers con JNA y exponerlos como servicios web o rpc (soap,rest,jms,remoting,etc) y llamarlos desde la aplicación java desde el host.
[1] una vez tuve q hacer algo así y encontré una utilidad para hacer el wrapper automagicamente cuyo nombre es jnareator.
Espero sea de ayuda.
Saludos,
José Manuel Peña P.
Twitter: @josemanuelp2
Sent from my BlackBerry® smartphone
_______________________________________________
l-desarrollo mailing list
l-desa...@velug.org.ve
http://listas.velug.org.ve/mailman/listinfo/l-desarrollo
2012/3/21 Samuel Duarte <s.du...@gmail.com>:
--
Atte:
Carlos A. Guerrero M.
On 3/21/2012 10:48 PM, Samuel Duarte wrote:
> Gracias por la respuesta de todos. Aprovecho a aclarar que el uso de
> Java fue practicamente impuesto en el proyecto aunque en base a lo
> sugerido tratare de negociarlo y los dll's son drivers para unas
> lectoras de carnets inteligentes (que se compraron a una empresa) que
> esta conectada a la pc via puerto serial.
>
> 2012/3/21 Luis Hernandez <lue...@gmail.com <mailto:lue...@gmail.com>>
>
> Lo que yo haría....
>
> Si los dlls son de librerías del negocio, se supone que se tienen
> los fuentes, entonces los migraría completamente a Java (aunque por
> nada del mundo usaría Java).
>
> Si los dlls son de librerías utilitarias, estoy completamente seguro
> que existen librerías para hacer casi cualquier cosa en Java para
> reemplazar las dlls que comentas.
>
> Como último comentario, si quieres algo que funcione en linux (o sea
> multiplataforma), debes partir por no usar dlls, y mentalizarte a
> migrar todo.
>
> PD: presiento que este hilo va a ser laaaaaaaargo, tratemos de no
> hacerlo, y olvidémos que dijo Java, xD
>
>
> El 21 de marzo de 2012 21:52, Samuel Duarte <s.du...@gmail.com
> <mailto:s.du...@gmail.com>> escribió:
>
> Buenas Noches, les escribía porque estoy trabajando actualmente
> en un proyecto donde se debe desarrollar una aplicación de
> escritorio en java que va a reemplazar a un app que actualmente
> esta en funcionamiento y fue desarrollada en visual basic 6,
> haciendo uso de unos .dll muy específicos de windows.
>
> ¿Que se recomienda en este caso para utilizar esos .dll desde la
> aplicación hecha en java de tal forma que pueda ejecutarse en
> linux u otro sistema operativo sin problemas?
>
> De antemano, gracias por la ayuda.
> Hasta Luego.
>
> _______________________________________________
> l-desarrollo mailing list
> l-desa...@velug.org.ve <mailto:l-desa...@velug.org.ve>
> http://listas.velug.org.ve/mailman/listinfo/l-desarrollo
>
>
>
>
> --
> Ing. Luis Hernández
> Ingeniero en Computación
> Ubuntu 11.10 / Debian squeeze
> lue...@gmail.com <mailto:lue...@gmail.com>
> http://cyberrevolucionario.blogspot.com/
> @luelher <http://twitter.com/luelher>
> 0424-5558074
> 0416-5013339
> Usuario Linux Nro 429461
>
>
> _______________________________________________
> l-desarrollo mailing list
> l-desa...@velug.org.ve <mailto:l-desa...@velug.org.ve>
> http://listas.velug.org.ve/mailman/listinfo/l-desarrollo
Si estas pensando en portabilidad y vas a usar comunicaciones seriales en java puedes usar, de una vez, las .jar de txrx para comunicaciones seriales y te independizas de las "dll del fabricante" que utilizas, aunque si quieres seguir en windows utiliza comapi que trabaja con el win32com.dll
________________________________
From: Samuel Duarte <s.du...@gmail.com>
To: Aplicaciones y Desarrollo en Linux <l-desa...@velug.org.ve>
Sent: Thursday, March 22, 2012 12:29 AM
Subject: Re: [l-desarrollo] Desarrollo de aplicacion de escritorio en Java
Para interactuar con una dll tienes que conocer de antemano su
interfaz, es decir su header file y conocer el lenguaje original de
desarrollo de la dll.
Luego necesitas un traductor entre tu lenguaje, en este caso Java, y
la dll. Esto es porque los tipos nativos de un lenguaje y otro
seguramente no van a ser iguales, ejemplo, mapear una estructura de C
a un objecto Java y vice-versa. Seguramente en Java hay librerías y/o
mecanismos para interactuar con dll en Windoze.
Si estuviesen usando Perl, generalmente es tan sencillo como ejecutar
h2xs con el .h t la gran mayoría del mapeo se hace automágicamente si
está hecha en C. Perl provee un lenguaje "pega" llamado XS que permite
mapear fácilmente entre la estructuras de Perl y otros lenguajes,
especialmente C. En Perl como es de costumbre, hay más de una forma de
hacerlo por lo que también existen libs tales como Win32::APi que
permite invocar la dll en Win32 directamente sin tener que usar XS.
Si quieres "portabilidad" deberías crear una clase que abstraiga las
funciones de acceso a la dll de tal manera que en el futuro puedas
reemplazar la dll por un shared object en Linux y no tener que
modificar el código hacia arriba. Esto se conoce como "wrapper" y
permite aislar tu código de la implementación específica de hardware o
similar.
Saludos,
--
Alejandro Imass
> De antemano, gracias por la ayuda.
> Hasta Luego.
>