1

これは plt-scheme ラッパー ライブラリの一部です。

(define InputMask

  (_bitmask '(NoEventMask =            #x00000000

            KeyPressMask =             #x00000001

            KeyReleaseMask =           #x00000002

            ...

            OwnerGrabButtonMask =      #x01000000)

      _long))

問題は、ビットマスク (または列挙型) のフィールドにアクセスする方法がわかりません。たとえば、KeyPressMask 値を取得するにはどうすればよいですか?

4

1 に答える 1

4

あなたはそうしない。ctypesの追加は簡単です。新しいctypeを作成するには、構築する既存のctypeと、既存の型に変換する関数とその逆の関数の2つの関数を提供する必要があります。

さて、_bitmask型はまさにそれを行います-それは上に構築され_int(しかしあなたの場合は上にあります_long)、2つの変換関数はシンボルのリストを整数に変換し、整数をシンボルのリストに変換します。このような型を使用すると、の値を知る必要はありません。外部関数への入力としてKeyPressMask渡すことができ、適切な数値に変換されることを知っているだけです。また、出力を持つ関数から結果値を取得すると、が含まれる可能性のあるシンボルのリストになることもわかっています。肝心なのは、Scheme側では、数値は処理せず、シンボルリストのみを処理するということです。'(KeyPressMask)InputMaskInputMaskKeyPressMask

なんらかの理由でこれらの値にアクセスする必要がある場合は、他の方法で独自のctypeを作成できます。上記make-ctypeで概説したように)使用は非常に簡単です。

于 2009-12-14T18:27:01.943 に答える