Je ne suis pas trop familier avec c, mais je dois utiliser une bibliothèque C dans mon code Java. J'ai créé la DLL et je suis capable d'y accéder, mais je tente de renvoyer une gamme d'INT du code C au code Java.
en CI pensait que vous pourriez simplement retourner un pointeur sur le tableau, mais Cela ne fonctionne pas comme si j'attends dans mon code Java. Voici le code C: p> si je testez ceci en C ++ en faisant p> alors ça marche bien et je reçois Les valeurs 739, 255 comme prévu. P> J'essaye d'utiliser en Java avec le paquet JNA comme (mais cela me donne 739, -16777214): P> public class DmapFDllLibrary {
interface DmapFLibrary extends Library {
DmapFLibrary INSTANCE = (DmapFLibrary) Native.loadLibrary("DmapFDll",
DmapFLibrary.class);
IntByReference getConusXY(double latitude, double longitude);
}
public static void main(String... strings) {
IntByReference xy_ref = DmapFLibrary.INSTANCE.getConusXY(33.92, -84.33);
Pointer p = xy_ref.getPointer();
System.out.println(p.getInt(0) + " " + p.getInt(1));
}
}
3 Réponses :
Le code C est bien s> devrait être meilleur (voir les autres commentaires), cependant, le problème principal est que je faisais une mauvaise utilisation de la méthode Java getint () code> pour le pointeur . Il semble que j'aurais dû utiliser le
getintarray () code>. P>
L'explication plus longue et peut-être plus claire est que vous prototypez votre fonction Java pour recevoir un pointeur (ou un successeur de pointeur) - lors de la création du rappel lui-même, vous utilisez getbyteArray (int ), ou l'un des autres getards. p>
Je n'utiliserais pas une telle fonction, car le tableau renvoyé ne sera jamais libéré / supprimé. Je préférerais changer la fonction c si je peux pour: p>
void myfunc (pointer Resuls, int Numbytes, octet const * retournerrarare) code> p> blockQuote>