为了连接 HDF5,我需要获取库导出的外部变量的引用/值,并将其传递给其他外部函数。
例如,有一个代表 native double 类型的变量:H5T_NATIVE_DOUBLE_g
。
在 VW、DLLCC 中,这可以通过声明性注释来实现:
H5T_NATIVE_DOUBLE_g
<C: hid_t H5T_NATIVE_DOUBLE_g>
Squeak FFI 有类似的东西吗?对于这样的用例有任何支持吗?
最佳答案
经过询问,(Threaded)FFIPlugin中似乎至少有基本的支持:
ExternalAddress class>>loadSymbol: moduleSymbol module: module
<primitive: 'primitiveLoadSymbolFromModule' module: 'SqueakFFIPrims'>
^ self primitiveFailed
因此,我们可以创建一个ExternalData,通过上面的消息获取其地址(传递全局变量名称和给定的ExternalLibrary作为模块参数),并指定其类型。
如果外部函数需要一个指针,我们就可以使用这个ExternalData来传递地址。
要传递该值,需要取消引用该地址,不确定它是否是由插件自动执行的...
就我而言,我知道我必须传递该值,因此我可以直接取消引用该地址以获取该值并存储该值(假设全局变量在初始化时分配一次并且之后不会更改并假设初始化已经在库加载时发生 - 许多应用程序特定的假设...)。
关于smalltalk - 如何在 Squeak FFI 中引用外部全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62427197/