gpt4 book ai didi

smalltalk - Squeak : Singleton ExternalLibrary vs. 类方法中的 FFI 与 ExternalStructures 中的方法?

转载 作者:行者123 更新时间:2023-12-04 12:17:50 26 4
gpt4 key购买 nike

我正在为现有库(用 C 编写)编写 FFI 接口(interface)。

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

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

拥有 ExternalLibrary每个导出函数都有一个方法:这可以在实例类中有方法,然后使用单例模式来拥有一个实例。或者使用“更复杂”的语法实现类中的方法,包括 moduleName在 FFI 杂注中,如:

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

什么更好?

此外,我还看到了其他方法,没有 ExternalLibrary完全没有,直接在 ExternalStructure 中实现方法.我更喜欢第二部分,但是,所有 FFI 接口(interface)定义都分布在几个类中,维护和移植到其他平台、Smalltalk 方言或库版本可能会更复杂。

那么,什么是“正确”的做法呢?

最佳答案

我会选择 ExternalLibrary方法,因为它允许您自定义库名称,而不是在每个方法中对其进行硬编码。

关于smalltalk - Squeak : Singleton ExternalLibrary vs. 类方法中的 FFI 与 ExternalStructures 中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41214583/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com