代码之家  ›  专栏  ›  技术社区  ›  Slartibartfast

使用pltscheme ffi的位掩码

  •  1
  • Slartibartfast  · 技术社区  · 15 年前

    这是PLT方案包装库的一部分:

    (define InputMask
    
      (_bitmask '(NoEventMask =            #x00000000
    
                KeyPressMask =             #x00000001
    
                KeyReleaseMask =           #x00000002
    
                ...
    
                OwnerGrabButtonMask =      #x01000000)
    
          _long))
    

    问题是我不知道如何访问位掩码(或枚举)中的字段。例如,如何获取keypressmask值?

    1 回复  |  直到 14 年前
        1
  •  4
  •   Eli Barzilay    15 年前

    不需要。添加ctype很容易:要创建一个新的ctype,需要提供一个要构建的现有ctype,以及两个函数——一个用于将任何内容转换为现有类型,另一个用于以其他方式转换。

    现在, _bitmask 类型就是这样——它建立在 _int (但在你的情况下,它是开着的 _long )和两个转换函数将符号列表转换为整数,将整数转换为符号列表。一旦使用了这种类型,就不需要知道 KeyPressMask --你只知道你可以通过 '(KeyPressMask) 作为一个 InputMask 输入到外部函数,并将其转换为适当的数字;并且当您从具有 输入掩码 输出,那么它将是可能包含 键盘打孔器 . 归根结底,在方案方面,您不处理数字——只处理符号列表。

    如果你 由于一些不明确的原因需要访问这些值,然后您可以用其他方式构建自己的ctype——使用 make-ctype (如上所述)应该很容易。