Question

J'ai un problème avec obtenir des informations de retour d'un bloc de mémoire allouée par la fonction appelée. Plus précisément, il est fonction XGetWindowProperties dans le X11 lib inclus avec la JNA. Il renvoie les résultats via le dernier paramètre -. PointerByReference prop_return

Je sais que la zone de mémoire réelle contient un tableau de Window. Mais comment puis-je créer ces objets? Je ne vois aucune façon de l'obtenir du pointeur lui-même et je ne peux pas obtenir un Buffer de lui, puisque je ne connais pas la taille de Window.

La fonction réelle est:. int XGetWindowProperty(...., unsigned char **prop_return) et les paramètres que je vous appelle avec, il est en fait int XGetWindowProperty(...., Window *prop_return[])

Était-ce utile?

La solution

La taille des éléments dans les données renvoyées est défini par le retournée « format » de XGetWindowProperty (), à une exception près ennuyeux. Xlib retourne toujours le format 32 comme un tableau de « long », même si 64 bits « long ». Fenêtre aurait le format 32.

Dans une recherche rapide Google, vous pouvez utiliser NativeLong.SIZE pour déterminer cela dans la JNA. Donc, si (NativeLong.SIZE == 8), vous disposez d'un tampon d'ID de fenêtre 64 bits, sinon des ID de fenêtre 32 bits.

L'ordre des octets de chaque valeur doit correspondre à la CPU que vous êtes.

Autres conseils

Vous aurez besoin d'extraire les données d'abord comme un tableau de type primitif (int ou long selon le cas). vous pouvez construire des objets X11.Window au besoin en utilisant les XIDs du tableau.

possible de mettre en place des convertisseurs pour gérer une partie de ce automatiquement, mais finalement il est plus simple pour un unique pour faire la conversion explicitement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top