ae galera me surgiu outra duvida estou fazendo a interface de uma dll mas o metodo dessa dll é o seguinte
void FAR PASCAL XPComVersion (char far * sBuffer // Ponteiro para buffer com ao menos 25 caracteres
);
como eu declaro isso na minha interface java??
public void XPComVersion (char far * sBuffer // Ponteiro para buffer com ao menos 25 caracteres
);
estou usando netbeans e jna para comunicar com essa dll…eu ja consegui a comunicaçao o problema agora sao esses parametros q nao existem em java por exemplo ponteiro…como eu passaria esse tipo de parametro??
em java os parâmetros já são ponteiros, não precisa do ‘*’
desse jeito você já esta usando a variavel como ponteiro para a referencia que for ser passada.
public void XPComVersion (char sBuffer // Ponteiro para buffer com ao menos 25 caracteres
);
T
thingol
Bom, você leu a documentação que lhe passei mas não entendeu bulhufas. O que você tem de fazer é o seguinte:
O C está esperando que você passe o endereço de um buffer de memória já reservado, para ele poder copiar de volta os caracteres. No seu caso, você teria de declarar seu método usando JNA com um parâmetro byte[]. Então o método deveria ser declarado como public void XPComVersion (byte[] sBuffer).
Na hora de chamar o método XPComVersion, você deve passar um byte[] já inicializado com um tamanho suficiente para o método em C poder copiar o valor desejado.
Depois, você tem de pegar o tal byte[] e chamar o método “Native.toString”. Vou dar um exemplo mais ou menos:
// Supondo que você tenha de deixar reservado 100 caracteresbyte[]version=newbyte[100];....XPComVersion(version);StringstrVersion=Native.toString(version);
[/code]
furacao123
vlw thingol e malz eu vo dar uma olhada mais a fundo no link q vc me passou…eh q atualmente estou sem tempo eu dei uma olhada rapida…e como estava com preça postei no forum novamente
mas vlw a ajuda novamente amanha pela manha ja vou tentar esse codigo q vc me passou. Obrigado
furacao123
consegui fazer funcionar mostrar a versao da dll usando byte[] como tipo de variavel…mas agora me surgiu outra duvida
fiz o seguinte código em um botao para pegar os valores recebidos pelo hardware
conta quantos bytes ha no buffer de recepçao
dll.ComGetnRx(3);
1 parametro eh o canal de comunicação, 2 parametro variavel q vai receber os bytes do buffer de recepção, 3 parametro o numero de bytes que serao pegos do buffer de recepção