PltScheme FFIから_bitmaskを使用して
質問
このは、PLT-スキームラッパー・ライブラリーの一部であります:
(define InputMask
(_bitmask '(NoEventMask = #x00000000
KeyPressMask = #x00000001
KeyReleaseMask = #x00000002
...
OwnerGrabButtonMask = #x01000000)
_long))
の事は、私が(そのことについてまたは列挙型)ビットマスク内のフィールドにアクセスする方法を見つけ出すカントです。どのように私は、例えばKeyPressMask値を得ることができますか?
解決
あなたにはありません。新しいCTYPEを作るために、あなたは上構築するために既存のctypeを提供する必要があり、そして二つの機能 - 1既存のタイプにかかわらず、および他の方法を翻訳する1翻訳するために、
:ctypesのを追加するのは簡単です。 それは_bitmask
に基づいています(しかし、あなたの場合には、それは_int
上だ)、および2つの変換関数は、整数にシンボルのリストを翻訳し、シンボルのリストに整数 - さて、_long
タイプだけではありません。そのようなタイプが使用されたら、KeyPressMask
の価値を知っている必要はありません - あなただけが外部関数に'(KeyPressMask)
入力としてInputMask
を渡すことができることを知って、それが適切な数に変換されます。そしてまた、あなたがInputMask
出力を持つ関数から結果値を得るとき、それはKeyPressMask
が含まれている可能性があるシンボルのリストになることを知っています。一番下の行は、Schemeの側にあなたが数字に対処していないということである - 。唯一のシンボルリストを
は、をした場合は、あなたが他のいくつかの方法であなた自身のctypeを構築することができ、いくつかのあいまいな理由で、これらの値にアクセスする必要があります - make-ctype
を使用して(私は上記で概説したように)非常に簡単なはずです<。 / P>
所属していません StackOverflow