Conversão C++ para Java

Pessoal, preciso converter uns trechos de código C++ para Java e estou com algumas dúvidas.

em algum post atrás perguntei alguma coisa sobre typedef do c++ e começei a conversão mas ainda me restam umas boas dúvidas.

Sei que no Java não há a opção de se usar unsigned (pelo menos foi o que achei googlando por aí), e preciso de tipos unsigned pra acessar uma bendita dll em C++.

Bom, o que estou fazendo é o seguinte:

  • pra cada typedef enum em c++ estou criando um enum em java;
  • pra cada typedef struct em c++ estou criando uma classe em java;

Esse tipo de abordagem seria correta?

Minhas dúvidas mais sérias são sobre o unsigned e outros tipos de typedef.

Qual seria a solução em Java para tipos do c++ como UCHAR, ULONG?

Como posso representar em Java os seguintes trechos em c++?

typedef void (*LOGRECORD_CALLBACK)(char *str, void *context);
typedef int (*STREAM_READ_CALLBACK)(ULONG channelNumber, void *context);

??

Nunca fiz nada mais complexo em c++ quando utilizava, e já faz um bom tempo que não utilizo. Talvez seja por isso que estou meio confuso.

Obrigado.

Quando você usa o JNA é necessário usar as regras do JNA- https://jna.dev.java.net/ - e lá eles têm uma tabelinha das conversões adequadas - por exemplo, um long do C é um int do Java (não importa se é signed ou unsigned); um __int64 do C é um long do Java.

Em particular, para seus callbacks, você precisa olhar a documentação do JNA com MUITO cuidado. Callbacks são monstros meio difíceis de lidar, mesmo em C, imagine em Java.

Cara, sabia que tinha deixado passar alguma coisa…e deixei passar justamente a doc mais importante…disfarça…hehehe

Parece que lá tem tudo ou quase tudo o que preciso…vou continuar aqui e vou postando o resultado…

Vamos ver como vai ser a briga com os monstros do Callback…

Valeu de novo thingol.

Beleza, começei os testes com alguns métodos da DLL e de início tá parecendo bem tranquilo.

Como a dll utiliza muitos tipos do windows, estou fazendo conversão até agora sem problemas pro java. estou utilizando a tabela de tipos do microsoft developer network (http://msdn.microsoft.com/en-us/library/aa383751(VS.85).aspx).

Só estou meio travado com o tipo HANDLE. Tenho algumas funções da dll que me retornam um HANDLE. Dei uma olhada na documentação da JNA e também uma pesquisada sobre acesso por JNI. O que achei de HANDLE foi somente sobre janelas. O HANDLE no meu caso acredito ser somente um ponteiro pra um objeto qualquer usado dentro da dll.

Não preciso fazer nenhum processamento com ele, só preciso armazenar ele pra posteriormente chamar outros métodos que precisam deste HANDLE como argumento. Será que deixei passar mais alguma coisa do JNA? O que posso utilizar em Java pra guardar este HANDLE?

O tipo HANDLE é um tipo “opaco” do Windows (mais ou menos como se fosse um ID de um registro em um banco de dados - ele não tem “sentido” por si só), e ele é na verdade uma referência a um objeto interno.

Se você estiver usando Windows-32 bits, então ele pode ser armazenado como um “int” normal do Java, sem problemas.