Utilizar JNA para acceder a una funcion de una DLL (C#) desde Java?

publicado por: Anonymous

Tengo una DLL (TransferImg.dll) que está escrita en C# (proporcionada por una empresa externa), la cual me comentan que necesito crear una interfaz para acceder a funciones de transmisión de imágenes desde JAVA, estuve investigando de como, pero no he encontrado algo que entienda o me funcione.

Los datos que me proporcionaron son:
– Librería TransferImg.dll
– Agregar referencia a proyecto.
– Agregar Using Transfer;
– Crear Objeto Command myobj = new Command();
– Llamar a la función myobj.SendImagesToScalela cual retorna un entero con el error.

Esta es la función que deseo utilizar:

int SendImagesToScale(string Ip, string PathImage ,string Tipo, Socket iSock);

No tengo una idea clara de como hacerlo, este es mi código tomado de un ejemplo:

public class SendImg {
    public interface CLibrary extends Library {
        CLibrary INSTANCE = (CLibrary)
            Native.loadLibrary((Platform.isWindows() ? "C:TransferImg.dll" : "c#"),                                   CLibrary.class);

        void SendImagesToScale(string Ip, string PathImage ,string Tipo, Socket iSock);
    }

    public static void main(String[] args) {
        CLibrary.INSTANCE.SendImagesToScale("192.168.1.111", "C:img.jpg", "Splash", 3306);

    }
}

Dll: TransferImg.dll

solución

Acabo de crear un proyecto de prueba en c# y he añadido la DLL que subiste al proyecto creado.
Y al inspeccionar la dll no existe la función int SendImagesToScale(string Ip, string PathImage ,string Tipo, Socket iSock); como tal pero existe una parecida que es esta: int TORREYSendImagesToScale(String sIpScale, String sPathImage, String sTypeData, Socket iSock);

El problema es que si quieres usarla no puedes hacerlo directamente ya que esta es una función de una clase y la función no esta declarada como estática por lo que deberás crear primero una instancia de la clase y luego llamar a la función através de la instancia creada.

TorreyTransfer.CommandTorrey commandTorrey = new TorreyTransfer.CommandTorrey();
commandTorrey.TORREYSendImagesToScale("IpScale", "pathImage", "TypeData", "UnSocket");

introducir la descripción de la imagen aquí

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *