Estoy trabajando en un proyecto de Java para ejecutar en Windows y Linux, y estoy usando una biblioteca compartida de terceros disponible para ambos sistemas operativos con la misma firma de métodos Pero, la convención de llamadas del dll es stdcall mientras que el objeto compartido es cdecl.Cómo usar JNA en .dll y .so con la misma firma de devolución de llamada
Me gustaría evitar duplicar el código de devolución de llamada, dos interfaces y dos clases, una interfaz para cada convención de llamadas. Me gustaría escribir un código único para la función de devolución de llamada. ¿Es eso posible?
El único cambio en el siguiente código para acceder a .so en Linux es la interfaz. El código de la función de devolución de llamada es el mismo. Apreciaré cualquier sugerencia.
import com.sun.jna.Callback;
interface IExternLibCallback extends Callback {..}
Este es el código que escribí para la devolución de llamada en DLL:
//Interface to stdcall (Windows)
package test1;
import com.sun.jna.win32.StdCallLibrary;
interface IExternLibCallback extends StdCallLibrary.StdCallCallback {
void callback (JEventDataStructure context_data);
}
//Class that implements the interface
package test1;
class ExternLibCallback implements IExternLibCallback {
... Other class codes go here ....
@ Override
public void callback (JEventDataStructure contextData) {
... Code of callback function
}
}
Gracias,
Fernando
de technomage es mucho más compatible BESO ya que previene multiplicaciones de código y 'if' evitables (¿qué harás cuando necesites implementar' somefunc2') – Cerber