Question

Ceci est une partie d'une bibliothèque d'emballage plt-schéma:

(define InputMask

  (_bitmask '(NoEventMask =            #x00000000

            KeyPressMask =             #x00000001

            KeyReleaseMask =           #x00000002

            ...

            OwnerGrabButtonMask =      #x01000000)

      _long))

La chose est que je ne peux pas comprendre comment accéder à des champs dans un masque de bits (ou ENUM pour cette matière). Comment puis-je obtenir la valeur KeyPressMask par exemple?

Était-ce utile?

La solution

Vous ne le faites pas. Ajout ctypes est facile:. Pour faire une nouvelle ctype, vous devez fournir une ctype existante à exploiter, et deux fonctions - un à traduire tout le type existant, et un à traduire dans l'autre sens

Maintenant, le type de _bitmask exactement ce que fait - il construit sur _int (mais dans votre cas, il est sur _long), et les deux fonctions de traduction traduire une liste de symboles à un nombre entier, et un entier à une liste de symboles . Une fois qu'un tel type est utilisé, vous n'avez pas besoin de connaître la valeur de KeyPressMask - vous savez que vous pouvez passer '(KeyPressMask) comme une entrée InputMask à la fonction étrangère, et qui sera traduit au nombre approprié; et vous savez aussi que lorsque vous obtenez la valeur du résultat d'une fonction qui a une sortie de InputMask, alors il sera une liste de symboles qui pourraient contenir KeyPressMask. L'essentiel est que du côté régime, vous ne traitez pas avec des chiffres -. Uniquement avec des listes de symboles

Si vous faire ont besoin d'accéder à ces valeurs pour une raison obscure, vous pouvez construire votre propre ctype d'une autre manière - en utilisant make-ctype (comme je l'ai indiqué ci-dessus) devrait être très facile <. / p>

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