如何在Squeak FFI中引用外部全局变量

问题描述 投票:1回答:1

对于接口HDF5,我需要获取库导出的外部变量的引用/值,并将其传递给其他外部函数。

例如,有一个表示本机双精度类型的变量:H5T_NATIVE_DOUBLE_g

在大众汽车中,DLLCC可通过声明性注释来实现:

H5T_NATIVE_DOUBLE_g
    <C: hid_t H5T_NATIVE_DOUBLE_g>

Squeak FFI中有类似的东西吗?这种用例有支持吗?

smalltalk ffi squeak
1个回答
0
投票

查询后,似乎在(Threaded)FFIPlugin中至少有基本的支持:

ExternalAddress>>loadSymbol: moduleSymbol module: module 
    <primitive: 'primitiveLoadSymbolFromModule' module: 'SqueakFFIPrims'>
    ^ self primitiveFailed

因此,我们可以创建一个ExternalData,通过上述消息获取其地址(传递全局变量名称和给定的ExternalLibrary作为模块参数),并指定其类型。如果外部函数需要指针,则可以使用此ExternalData传递地址。要传递该值,需要取消引用该地址,不确定该地址是否由插件自动执行...

在我的情况下,我知道我将必须传递该值,因此我可以直接取消引用该值并将其存储(假设全局变量在初始化时分配一次,并且以后不会更改,并假定初始化已库加载时已经发生-很多特定于应用程序的假设...)。

© www.soinside.com 2019 - 2024. All rights reserved.