Mit _bitmask von PltScheme FFI
Frage
Dies ist ein Teil einer PLT-Schema Wrapper-Bibliothek:
(define InputMask
(_bitmask '(NoEventMask = #x00000000
KeyPressMask = #x00000001
KeyReleaseMask = #x00000002
...
OwnerGrabButtonMask = #x01000000)
_long))
Die Sache ist, ich kann nicht herausfinden, wie Felder für den Zugriff auf in einer Bitmaske (oder Enum für diese Angelegenheit). Wie kann ich KeyPressMask Wert zum Beispiel bekommen?
Lösung
Sie dies nicht tun. Hinzufügen ctypes ist einfach:., Um eine neue ctype zu machen, benötigen Sie einen vorhandenen ctype zu schaffen, auf zu bauen, und zwei Funktionen - zu übersetzen, was auf den vorhandenen Typen, und eine die andere Art und Weise zu übersetzen
Nun hat der _bitmask
Typ genau das - es auf _int
baut (aber in Ihrem Fall, es ist auf _long
), und die beiden Funktionen Übersetzung eine Liste von Symbolen auf eine ganze Zahl übersetzen, und eine ganze Zahl auf eine Liste von Symbolen . Sobald ein solcher Typ verwendet wird, brauchen Sie nicht den Wert von KeyPressMask
kennen - Sie wissen nur, dass Sie '(KeyPressMask)
als InputMask
Eingabe in die Fremd Funktion übergeben können, und das wird an die entsprechende Nummer übersetzt werden; und Sie wissen auch, dass, wenn Sie den Ergebniswert aus einer Funktion erhalten, die einen InputMask
Ausgang hat, dann wird es eine Liste von Symbolen, die KeyPressMask
enthalten könnten. Unterm Strich ist, dass auf der Seite Schema Sie nicht mit Zahlen umgehen können -. Nur mit Symbollisten
Wenn Sie tun müssen diese Werte aus unerfindlichen Gründen zugreifen, dann können Sie Ihre eigenen ctype auf andere Weise bauen - mit make-ctype
(wie ich oben beschrieben) sollte sehr einfach sein <. / p>