gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 09:38:46 27 4
gpt4 key购买 nike

为了连接 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/

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