对于接口HDF5,我需要获取库导出的外部变量的引用/值,并将其传递给其他外部函数。
例如,有一个表示本机双精度类型的变量:H5T_NATIVE_DOUBLE_g
。
在大众汽车中,DLLCC可通过声明性注释来实现:
H5T_NATIVE_DOUBLE_g
<C: hid_t H5T_NATIVE_DOUBLE_g>
Squeak FFI中有类似的东西吗?这种用例有支持吗?
查询后,似乎在(Threaded)FFIPlugin中至少有基本的支持:
ExternalAddress>>loadSymbol: moduleSymbol module: module
<primitive: 'primitiveLoadSymbolFromModule' module: 'SqueakFFIPrims'>
^ self primitiveFailed
因此,我们可以创建一个ExternalData,通过上述消息获取其地址(传递全局变量名称和给定的ExternalLibrary作为模块参数),并指定其类型。如果外部函数需要指针,则可以使用此ExternalData传递地址。要传递该值,需要取消引用该地址,不确定该地址是否由插件自动执行...
在我的情况下,我知道我将必须传递该值,因此我可以直接取消引用该值并将其存储(假设全局变量在初始化时分配一次,并且以后不会更改,并假定初始化已库加载时已经发生-很多特定于应用程序的假设...)。