Python3 cffi:有没有办法将两个独立的 ffi 合并为一个?

Python3 cffi: is there a way to merge two independent ffi's into one?

假设我有两个需要协同工作的库。一个库有一个函数接受另一个库中内置的类型。

进一步假设我为两个库中的每一个都创建了两个独立的 FFI 接口。

现在,我让每个单独的库都能正常工作,但是当我将一个 ffi 中内置的 object 类型传递给另一个 ffi 时,出现以下错误:

TypeError: initializer for ctype 'Foo *' appears indeed to be 'Foo *', but the types are different (check that you are not e.g. mixing up different ffi instances)

我试图避免的是将这两个库集成为一个 header 和一个完全集成的 class。这是因为 class 将是 one-off 并且方法的组合将是随机的、详细的、具体的、过度专业化的:即,难以命名并记住以后使用。

有什么方法可以合并两个 ffi 以便它们一起工作吗?

或者,例如,执行某种从一种 ffi's 类型到另一种类型的转换操作?库后端将正常工作...

(我试过通过 second_ffi.cast('Foo *',first_ffi_foo) 进行转换,但似乎需要更多手动操作,例如将第一个 ffi 中的字节复制到第二个 ffi 中)

我最终通过将 cffi.FFI 实例的范围与我将 C-header 划分到的 classes 的范围分开来解决了这个问题。

通过在 class 声明中接受 cffi.FFI() 选项,我能够将库接口混合在一起:

class LibFoo:
    def __init__(self, ffi_option: Optional[FFI], ...):
       if ffi_option is None:
          self.ffi = FFI()
          self.__ownFFI = True
       else:
          self.ffi = ffi
          self.__ownFFI = False

    def __del__(self):
        if self.__ownFFI:
           # close down the ffi

组成:

class ManyLibs(LibFoo, LibBar):
   def __init__(self):
       self.ffi = FFI()
       LibFoo.__init__(self,self.ffi)
       LibBar.__init__(self.self.ffi)