小编ger*_*era的帖子

Squeak中的FFI:Singleton ExternalLibrary与类方法与ExternalStructures中的方法相比?

我正在为现有的库编写一个FFI接口(用C语言编写).

该库使用了大量不透明结构,因此我定义了一些ExternalStructures(没有字段)用作void*.

现在我已经看到了两种与库连接的方式(或四种方式):

有一个ExternalLibrary与每个导出函数的方法:这可能会在实例类的方法,然后使用一个单例模式有一个实例.或者使用"更复杂"的语法实现类侧的方法,包括moduleNameFFI编译指示,如:

ffiTestFloats: f1 with: f2
  "FFITestLibrary ffiTestFloats: $A with: 65.0"
  <cdecl: float 'ffiTestFloats' (float float) module:'SqueakFFIPrims'>
  ^self externalCallFailed
Run Code Online (Sandbox Code Playgroud)

什么更好?

另外,我已经看到了这样做的其他方式,根本没有ExternalLibrary,并直接在实现方法ExternalStructure.我更喜欢第二部分,但是,所有FFI接口定义都通过几个类传播,维护和移植到其他平台,Smalltalk方言或库版本可能更复杂.

那么,做到这一点的"正确"方式是什么?

smalltalk squeak ffi

7
推荐指数
1
解决办法
104
查看次数

标签 统计

ffi ×1

smalltalk ×1

squeak ×1