Pergunta

Eu herdei um projeto legado J ++. Eu tenho atualizado este projeto para Sun Java padrão com sucesso.

No entanto, este projecto inclui um C ++ nativo dll que as conversações de código Java para através do específico da Microsoft quadro RNI .

É desnecessário dizer, chamando System.loadLibrary ( "myRniNativeDll") agora lança um UnsatisifiedLinkError, dizendo uma das dependências não pôde ser encontrado.

Eu estou totalmente sem noção como migrar um C ++ RNI dll a uma JNI dll; Não tenho a menor idéia por onde começar. Eu tenho o código fonte C ++, mas eu não sei como construir uma dll JNI. Existem algumas dicas / tutoriais / materiais on-line você especialistas Java pode apontar-me a?

Foi útil?

Solução

Se o licenciamento é aceitável (LGPL), Java Native Acesso fornece uma FFI vez mais amigável do que a JNI faz; portabilidade pode reduzir a despir a camada de RNI e apenas expondo um simples 'API C'-exigível.

Outras dicas

Dê uma olhada JNA - talvez seja possível para acessar o RNI DLL diretamente dessa forma ; ou pelo menos ele vai fazer o trabalho de portar muito mais fácil do que fazê-JNI manualmente.

Se possível, eu sugiro que você considere evitando a RNI -> JNI portar problema por reescrever o código C ++ em Java puro.

código de escrita JNI requer uma enorme quantidade de cuidado, e coloca a estabilidade JVM em risco se você errar. Meu conselho é para evitá-lo se você puder.

Enquanto eu nunca usei RNI da Microsoft, apenas a JNI da Sun, eu esperaria que você não pode usar diretamente uma DLL de estilo RNI como se fosse uma DLL JNI-estilo. Eu também tenho conhecimento de qualquer coisa que possa converter automaticamente ou ponte RNI a JNI.

Você não mencionou se você tem a fonte para o C ++ RNI DLL, embora eu vou assumir que você faz vez que você menciona herdar o projeto. Se você tiver qualquer C experiência ++ / C, e ter uma boa idéia do que a funcionalidade do RNI DLL está fornecendo, não deve ser muito difícil para movê-lo para JNI. O tempo investido em portá-la provavelmente pagar para mantê-lo avançar.

O link fornecido para a entrada JNI em Wikipedia tem muitos links úteis sobre codificação com JNI. Sem um pouco mais detalhadamente, é difícil dar qualquer outro conselho.

interface Java Native: Guia do Programador e Especificação é o melhor recurso que eu 've encontrados para escrever código JNI. Não abrange RNI -.> JNI, mas é um grande * ponto de partida para aprender como funciona JNI

* É realmente muito seco, e não particularmente divertido de ler, mas é o melhor que eu tenho sido capaz de encontrar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top