DICAS

Visite a biblioteca de dicas da comunidade.

Saiba mais

ARTIGOS

Abordagens detalhadas sobre assuntos diversos.

Saiba mais

INICIANTES

Aprenda a programar de um modo simples e fácil.

Saiba mais

DOWNLOADS

Acesse os materiais exclusivos aos membros.

Saiba mais
voltar

Como usar JNI gerado pelo Java2OP?

Home Fóruns Dúvidas gerais sobre código fonte com Delphi Como usar JNI gerado pelo Java2OP?

Visualizando 1 post (de 1 do total)
  • Autor
    Posts
  • #4133
    Antonio103
    Participante

    Olá. Estou tentando utlizar a sdk de um fabricante, mas me gerou uma duvida referente a criar a classe de callback.

    No android studio criei um projeto apenas para importar o sdk do fabricante.
    Depois eu gerei o APK e o descompactei para pegar o arquivo .dex que tem a sdk.
    Feito isso converti em jar e depois adicionei o jar no meu projeto Delphi.

    Logo em seguida, gerei a JNI do jar usando o Java2OP.
    Segue um pedaço do fonte gerado:

    JIPrinterCallbackClass = interface(JIInterfaceClass)
        ['{ABEF5590-D20B-43A1-A35B-807051A7330D}']
      end;
    
      [JavaSignature('com/getnet/posdigital/printer/IPrinterCallback')]
      JIPrinterCallback = interface(JIInterface)
        ['{08B39C40-A389-4ED5-9E6B-DA7D6A8C7600}']
        procedure onError(P1: Integer); cdecl;
        procedure onSuccess; cdecl;
      end;
      TJIPrinterCallback = class(TJavaGenericImport<JIPrinterCallbackClass>) end;
    
      JIPrinterCallback_StubClass = interface(JBinderClass)
        ['{758A2E1B-E31A-4221-BAC7-8092F224090A}']
        {class} function asInterface(P1: JIBinder): JIPrinterCallback; cdecl;
        {class} function init: JIPrinterCallback_Stub; cdecl;
      end;
    
      [JavaSignature('com/getnet/posdigital/printer/IPrinterCallback$Stub')]
      JIPrinterCallback_Stub = interface(JBinder)
        ['{CF6E873A-2FA2-4C71-A2FA-66B27EDA1A72}']
        function asBinder: JIBinder; cdecl;
        function onTransact(P1: Integer; P2: JParcel; P3: JParcel; P4: Integer): Boolean; cdecl;
      end;
      TJIPrinterCallback_Stub = class(TJavaGenericImport<JIPrinterCallback_StubClass>) end;
    
      JIPrinterCallback_Stub_ProxyClass = interface(JIPrinterCallbackClass)
        ['{D013AB01-DBD9-4CC3-AC42-CB036F080131}']
      end;
    
      [JavaSignature('com/getnet/posdigital/printer/IPrinterCallback$Stub$Proxy')]
      JIPrinterCallback_Stub_Proxy = interface(JIPrinterCallback)
        ['{5FB7E803-D568-43F9-8F42-634E96FC5279}']
        function asBinder: JIBinder; cdecl;
        function getInterfaceDescriptor: JString; cdecl;
        procedure onError(P1: Integer); cdecl;
        procedure onSuccess; cdecl;
      end;
      TJIPrinterCallback_Stub_Proxy = class(TJavaGenericImport<JIPrinterCallback_Stub_ProxyClass>) end;

    Eu fiz teste onde eu chamo a função Bip e funcionou perfeitamente indicando que a aplicação Delphi esta se comunicando com o dispositivo atraves do SDK.

    O detalhe é que a função Bip não recebe um parametro que é um callback, mas tem funções que precisa passar o callback e é nesse ponto que travei.

    No java teria que ser assim a classe:

    class PrinterCallbackStub extends IPrinterCallback.Stub {
    
        @Override
        public void onSuccess() throws RemoteException {
    
        }
    
        @Override
        public void onError(int i) throws RemoteException {
    
        }
    }

    Como tem que ficar essa classe em Delphi?
    Desde já agradeço.

Visualizando 1 post (de 1 do total)
  • Você deve fazer login para responder a este tópico.

Ir ao topo
© 2024 Infus Soluções em Tecnologia - Todos os Direitos Reservados