API e documentação claros

Documentação Extensiva
e dezenas de exemplos.

Suporte imediato

Obtenha uma resposta dos engenheiros do JNIWrapper no prazo de um dia útil no site de suporte ou no serviço de suporte premium.

Experiência comprovada

Criado por engenheiros que têm vindo a integrar Java com o MS IE, Firefox, WebKit, Safari e Chromium há 20 anos.

Integração simples

Exemplo de chamada de função

  • /.../
    • /*
    •  * Copyright (c) 2000-2024 TeamDev Ltd. All rights reserved.
    •  * TeamDev PROPRIETARY and CONFIDENTIAL.
    •  * Use is subject to licence terms.
    •  */
  •  
  • import ...
    • import com.jniwrapper.AnsiString;
    • import com.jniwrapper.Function;
    • import com.jniwrapper.Int;
    • import com.jniwrapper.Pointer;
  •  
  • /**...*/
    • /**
    •  * This class demonstrates how to invoke native functions from dynamic-link libraries (DLL) using
    •  * the {@link Function} class.
    •  */
  • public class FunctionCallSample extends BasicJNIWrapperSample {...
    •  
    • /**
    •  * This method invokes the sumStdCall native function using the STDCALL calling convention.
    •  */
    • public static void returnValueSample() {...
      • int a = 10, b = 100;
      • Function add = SAMPLE_LIB.getFunction("sumStdCall");
      • Int result = new Int();
      • add.invoke(result, new Int(a), new Int(b));
      • System.out.println("The sum of a = " + a + " and b = " + b + " is " + result.getValue());
      }
    •  
    • /**
    •  * This method invokes the printStringCdeclCall native function using the CDECL calling convention.
    •  * printStringCdeclCall prints the specified string to the standard output stream on the native side.
    •  */
    • public static void noReturnValueStdCallSample() {...
      • String str = "This string was put to the out stream in printStringCdeclCall native function.";
      • Function putString = SAMPLE_LIB.getFunction("printStringCdeclCall");
      • putString.setCallingConvention(Function.CDECL_CALLING_CONVENTION);
      • putString.invoke(null, new Pointer(new AnsiString(str)));
      }
    •  
    • public static void main(String[] args) {...
      • returnValueSample();
      • noReturnValueStdCallSample();
      }
    }
  •  

Como poupar dinheiro e tempo com o JNIWrapper

Save money and time with JNIWrapper

Suponha que existe uma aplicação, escrita em C, que monitoriza as condições de uma fábrica e que é necessário incorporar esta funcionalidade numa aplicação Java.

A abordagem tradicional usando JNI envolve desenvolvedores Java e C bem como coordenação de gerenciamento para manter a funcionalidade sincronizada.

Em contrapartida, a utilização do JNIWrapper é trivial e poupa tempo e esforços de forma significativa.

Save money and time with JNIWrapper
Save money and time with JNIWrapper

Características

Alto desempenho

O JNIWrapper pode tratar grandes quantidades de dados envolvidos nas interacções entre o código Java e o código nativo, sem qualquer afinação da sua parte.

Gestão automática da memória

Todos os recursos atribuídos pelo JNIWrapper são libertados automaticamente quando já não são necessários. É possível tratar as variáveis do JNIWrapper como objetos Java normais que podem ser recuperados pelo coletor de lixo Java. Além disso, os objetos JNIWrapper são seguros no que diz respeito aos finalizadores: todos os recursos estão garantidamente disponíveis durante a finalização.

Invocação de função nativa

O JNIWrapper suporta as convenções de chamada stdcall e cdecl e vários tipos de dados C/C++, incluindo estruturas, uniões e ponteiros. As chamadas de retorno são totalmente suportadas com qualquer parâmetro e tipos de retorno e ambas as convenções de chamada. Consulte Chamando Funções Nativas no nosso Guia do Programador. Veja Amostras do JNIWrapper

Arquitetura extensível

É possível implementar novos tipos de dados ou personalizar os existentes, assumindo o controle total sobre o comportamento dos parâmetros. Veja Estruturas e Uniões no nosso Guia do Programador. Veja também os exemplos relacionados: Exemplos de Uniões, Estrutura de União.

Invocação de funções simultâneas com segurança de thread

Pode executar todas as chamadas de funções nativas simultaneamente a partir de diferentes threads Java sem a necessidade de sincronização, tal como se estivesse invocando métodos Java simples. Consulte Trabalhando com Multithreading no nosso Guia do Programador.

Mecanismo de pesquisa personalizado

Além de um mecanismo padrão para encontrar e carregar uma biblioteca nativa, o JNIWrapper fornece uma forma de personalizar o carregamento da biblioteca. Além disso, é possível carregar bibliotecas nativas a partir de arquivos JAR.

Assistente de geração de código

Utilizando o Assistente de Geração de Código incluído no JNIWrapper, é possível gerar wrappers Java para um conjunto necessário de tipos C, incluindo estruturas, uniões e retornos de chamada.

WinPack

Ao adquirir o JNIWrapper, recebe o WinPack, um suplemento gratuito que permite o acesso à API nativa do Windows e às bibliotecas a partir do código Java. O WinPack fornece vários recursos de integração para fazer com que seu aplicativo Java pareça e se comporte como um cidadão Win32. O WinPack não requer conhecimento extensivo da API Win32, nem qualquer escrita de classes de wrapper complicadas para JNI.

Caixas de diálogo

Com o WinPack, pode utilizar as caixas de diálogo familiares do Windows e modificar as propriedades da janela como quiser. Veja os exemplos a seguir: Dialog de Escolha de Cor, Dialog de Escolha de Arquivo, Dialog de Abrir/Salvar Arquivo.

Serviços, processos e registros de eventos

Utilizando a API de serviços, é possível iniciar, parar ou eliminar um serviço, apresentar todos os serviços em execução numa lista e alterar as opções do serviço. O WinPack permite-lhe monitorar e gerir processos do sistema, módulos, memória e registros de eventos. Ver exemplos relacionados: Accessar Serviços de Computador Remoto, Amostra de Processos Enum, Amostra de Log de Eventos.

Acesso ao registro

Com apenas um fragmento de código, pode fazer com que a sua aplicação Java leia, escreva ou elimine as chaves e os valores do registro do Windows. A maioria dos principais tipos de dados é suportada. Veja os seguintes exemplos: Configurar Valores de Chave de Registro, Valores de Chave de Registro Enum.

Gestão de eventos e arquivos

O WinPack permite-lhe ouvir os eventos do sistema de arquivos. Também é possível obter atributos de arquivos, verificar o espaço em disco e identificar o tipo de suporte de disco. Veja o Exemplo do Sistema de Arquivos.

Exemplos de aplicações criadas pelos nossos clientes

Aplicações ricas em Java de clientes.

A JNIWrapper fornece acesso fácil à funcionalidades e recursos do SO, tais como janelas e diálogos nativos, registro do sistema, ganchos, recursos da shell, etc. A biblioteca permite a utilização de funções de qualquer plataforma sem a necessidade de escrever wrappers (JNI) adicionais.

Bibliotecas Java para integração com SDKs nativos.

O Gerador de Código do JNIWrapper cria wrappers para tipos C nativos a partir de um SDK. Isso torna a rotina de desenvolvimento Java mais eficiente.

Integração com aplicações nativas antigas.

O JNIWrapper permite que as aplicações Java interoperem com aplicações nativas e bibliotecas escritas em diferentes linguagens de programação, como C/C++, Pascal, ASM, etc.

Soluções de integração Java multiplataforma

que podem ser construídas sobre as bibliotecas nativas multiplataformas existentes. Isto é possível graças ao suporte JNIWrapper de vários sistemas operacionais e plataformas.

Plug-ins e add-ons escritos em Java

para vários cenários de integração, o que é possível graças ao excelente desempenho do JNIWrapper e à sua gestão nativa da memória.

Ajuda

Contatar o suporte

Durante o período de avaliação, utilize o endereço de correio eletrônico fornecido na mensagem de correio eletrônico de avaliação.

Se tiver uma inscrição de suporte ativa, utilize o endereço de correio eletrônico fornecido na mensagem de correio eletrônico de confirmação da compra da licença.

Suporte Avaliação

Fornecido por 30 dias

Suporte Padrão

Fornecido por um ano com 25% de desconto para renovação

Suporte Premium

Tempo e materiais de serviço baseado em contratos
Ajuda com o uso do produto
Ajuda com o uso do produto
Ajuda com o uso do produto
Resposta no prazo de um dia útil
Resposta no prazo de um dia útil
Resposta no prazo de um dia útil
Fornecido por correio eletrônico
Fornecido por correio eletrônico
Fornecido por correio eletrônico
Atualizações de produtos
Atualizações de produtos
Telefone, chat e ambiente de trabalho remoto
Desenvolvimento de funcionalidades
Prioridade na resolução de problemas
Na verdade, adquirimos uma licença e estamos muito satisfeitos com o produto: ótimo trabalho! Este produto nos poupa tempo, uma vez que não tenho de escrever a camada JNI. — Sébastien Gemme, Agência Espacial Canadiana
…gosto muito do seu produto. — Rob Desilets, Document Systems Inc.
…Fiquei muito impressionado com a quantidade de funcionalidades fornecidas, bem como com a estabilidade e robustez do produto… — Stephen Renner, IP Austrália
Estou muito satisfeito com o produto, pois considero a abstração da funcionalidade JNI de Java bastante útil. — Adam Acott, Novex Software Development Inc.
…a minha breve experiência com o seu produto, tendo em conta a minha experiência anterior com JNI, foi muito satisfatória. Desenvolvi num fim-de-semana o que me levou duas semanas, pelo menos, utilizando outras ferramentas. — Hector Zendejas, Cardware.biz
Licenciamento e preços

Pague uma vez, use para sempre.

A utilização da licença é regida pelo contrato de licença do produto

Windows
32/64-bit
macOS
ppc32/x86/x64
Linux
x86/x64
Linux
ppc32/ppc64
Cross-Desktop
Win, Mac, Linux
Solaris
x86/x64
Solaris
ultraSPARC
IBM AIX
ppc32

Por desenvolvedor

  • 1 desenvolvedor

  • Licença perpétua A licença perpétua significa que você sempre poderá usar a versão do produto que comprou ou aquela para a qual atualizou durante a assinatura de suporte válida.

  • Distribuição gratuita na sua aplicação

  • Projetos Ilimitados

  • Atualizações e Suporte

  • 1 ano de atualizações de produtos

  • 1 ano de assistência técnica

  • 55 horas de suporte durante 1 ano

Projeto

  • Desenvolvedores Ilimitados

  • Licença perpétua A licença perpétua significa que você sempre poderá usar a versão do produto que comprou ou aquela para a qual atualizou durante a assinatura de suporte válida.

  • Distribuição gratuita na sua aplicação

  • 1 projeto Incluído num pacote Java do projeto .

  • Atualizações e Suporte

  • 1 ano de atualizações de produtos

  • 1 ano de assistência técnica

  • 75 horas de suporte durante 1 ano

Em toda a empresa

  • Desenvolvedores Ilimitados

  • Licença perpétua A licença perpétua significa que você sempre poderá usar a versão do produto que comprou ou aquela para a qual atualizou durante a assinatura de suporte válida.

  • Distribuição gratuita na sua aplicação

  • Projetos Ilimitados

  • Atualizações e Suporte

  • 1 ano de atualizações de produtos

  • 1 ano de assistência técnica

  • 100 horas de suporte durante 1 ano

Atualizações e Suporte renovação da inscrição por 1 ano

com 25% de desconto no preço da licença

Os preços apresentado nesta página não incluem quaisquer impostos.

Obter licenças através de revendedores

Baixar JNIWrapper

para

Windows
32/64-bit
macOS
ppc32/x86/x64
Linux
x86/x64
Linux
ppc32/ppc64
Cross-Desktop
Win, Mac, Linux
Solaris
x86/x64
Solaris
ultraSPARC
IBM AIX
ppc32

Perguntas mais frequentes

Questões técnicas

Que plataformas são suportadas pelo JNIWrapper?

O JNIWrapper suporta diferentes sistemas operacionais e arquiteturas:

  • Windows XP, Windows 2000, Windows Vista, Windows 7, Windows 8 para as arquiteturas x86 e x86_64;
  • Linux para as arquiteturas x86, x86_64, PPC e PPC64;
  • macOS com PCC, arquiteturas x86 e x86_64, SunOS para as arquiteturas x86, x86_64, sparc e sparc64;
  • AIX PCC.

Eu chamo uma função com o número correto de parâmetros, mas continuo a receber uma exceção sobre tipos de parâmetros incorretos.

Certifique-se de que você definiu a convenção de chamada de função correta. As predefinições são: stdcall para Windows, uma vez que é utilizada pela maior parte da API do Windows, e cdecl para Linux - é utilizada por quase todas as bibliotecas.

Gostaria de invocar uma função a partir de uma DLL que gerei com o C# utilizando o JNIWrapper. É possível?

O JNIWrapper não foi concebido para integração com bibliotecas .NET que foram criadas utilizando C# ou qualquer outra linguagem de programação .NET. Na verdade, essas bibliotecas têm uma arquitetura completamente diferente das bibliotecas Win DLL normais. No entanto, é possível integrar uma biblioteca .NET se esta fornecer o nível COM Interop. Neste caso, pode utilizar o nosso produto ComfyJ para isso.

É possível fazer a integração com uma biblioteca C++ utilizando o JNIWrapper?

Tecnicamente, é possível invocar as funções dessa biblioteca utilizando o JNIWrapper, mas isso não lhe dará a capacidade de trabalhar com objetos C++ e os seus métodos. Existem duas soluções possíveis. A primeira consiste em criar as funções de wrapper em C simples para as funções C++ necessárias dessa biblioteca. A segunda é ativar a interoperabilidade COM nessa biblioteca C++ e, em seguida, usar nosso produto ComfyJ para integração com ela.

Como posso redistribuir a biblioteca JNIWrapper nativa (jniwrap.dll, jniwrap64.dll, etc.) com a minha aplicação?

A forma mais simples é empacotar todos os ficheiros de biblioteca necessários (incluindo as bibliotecas JNIWrapper) na pasta raiz de um arquivo JAR da aplicação.

Onde devo colocar o meu arquivo de licença do JNIWrapper (jniwrap.lic)?

A forma mais simples é empacotar esse arquivo na subpasta \META-INF\ de um arquivo JAR da aplicação.

Existe alguma forma de criar um wrapper Java para um determinado tipo nativo tendo apenas a sua definição em C?

Sim, você pode utilizar a aplicação utilitária Codegen for JNIWrapper para gerar o wrapper Java correspondente.

Como é que configuro a licença?

Questões de licenciamento

Em que se baseia a sua licença?

O nosso licenciamento é baseado nas versões do JNIWrapper. Ao adquirir a licença do nosso produto, você obtém o direito de utilizar a versão principal atual do produto.

Posso receber uma atualização gratuita?

As atualizações de versões principais e secundárias emitidas durante o período ativo da inscrição do Suporte Padrão são gratuitas. Após a expiração da inscrição do Suporte Padrão, pode renová-la com um desconto de 25% sobre o preço atual da licença.

Quais são os termos de utilização do JNIWrapper?

Há 6 pessoas na nossa equipa e 2 delas precisam utilizar o JNIWrapper. Quantas licenças precisamos de comprar?

Só precisa de comprar 2 licenças. Licenciamos a nossa biblioteca de acordo com o número de pessoas que escrevem código utilizando a nossa biblioteca.

Se retirarmos um programador, que trabalha com o JNIWrapper, do projeto, podemos reatribuir a licença a outro programador?

Isso é possível com a licença por desenvolvedor.

Quantas cópias do meu produto posso distribuir com o JNIWrapper incluído?

Você pode distribuir um número ilimitado de cópias do seu produto com a nossa biblioteca incluída.

Temos 5 pessoas que trabalham com o JNIWrapper num produto.

Poderá querer adquirir uma Licença de Projeto, que é rentável no caso de haver 3 ou mais programadores na equipe. A Licença de Projeto está vinculada a um único projeto que realiza, mas permite que qualquer número de programadores da sua empresa trabalhe com a nossa biblioteca.

Como é que uma Licença de Projeto está associada ao meu projeto?

A Licença de Projeto é vinculada ao seu projeto através de um nome de classe totalmente qualificado. Um nome totalmente qualificado para uma classe é o nome do pacote seguido pelo nome da classe, separados por um ponto (.). Por exemplo: com.mycompany.myproduct.MyClass

Que classe pode ser utilizada para vincular a licença?

Esta pode ser qualquer classe da sua aplicação. O único requisito é que seja incluída no caminho de classes da sua aplicação Java.

Qual é a definição de “projeto” nos termos da Licença de Projeto?

Quando dizemos “projeto”, estamos pensando num produto da sua empresa, incluindo as suas futuras versões do produto ou potenciais trabalhos derivados baseados no seu produto.

Poderemos utilizar a Licença de Projeto noutro projeto que façamos?

A Licença de Projeto está associada apenas a um projeto.

Gostaríamos de obter uma licença para vários projetos para uma equipe de programadores. Qual é a sua oferta?

A melhor solução seria comprar a Licença para toda a empresa, que cobre qualquer número de programadores e projetos de uma empresa.

Como posso encontrar o arquivo de licença?

Após a compra da licença, receberá uma pasta com dois tipos de arquivo de licença: desenvolvimento e runtime. A licença de desenvolvimento destina-se a ser utilizada no processo de desenvolvimento. A licença runtime deve ser utilizada para a distribuição do seu software com o JNIWrapper incluído.

Teste gratuito de 30‑dias

Enviaremos por correio eletrônico a sua chave de avaliação e um guia de início rápido.

Não utilize caracteres especiais ou espaços

Introduza um endereço de correio eletrônico válido

Leia e aceite os termos para continuar.
Spinner

Enviando…

Desculpe, o envio foi interrompido

Tente novamente. Se o problema persistir, contate-nos através do endereço info@teamdev.com.

Obrigado!

Inicie o seu teste gratuito em alguns passos simples

1

Verificar o seu correio eletrônico

Os links para baixar a sua licença de avaliação e o arquivo de distribuição chegarão à sua caixa de correio eletrônico dentro de alguns minutos.

Se a mensagem se perder na sua caixa de correio, tente procurar um e-mail do JNIWrapper Evaluation Support com o assunto “Seu Período Gratuito de Testes de 30 Dias”.

2

Instalar a licença

Para começar a utilizar o JNIWrapper

  • baixe a sua licença de avaliação,
  • instale o arquivo JAR da biblioteca e a licença utilizando as instruções.
3

Começar a trabalhar

Consulte o tutorial para pôr o JNIWrapper a funcionar num instante.

Encontre mais informações úteis na Documentação de suporte.

Consulte os exemplos prontos para obter instruções e ideias sobre o que pode fazer com o seu recém-adquirido JNIWrapper.