3

我试图了解 Ruby 的 Fiddle 库是如何工作的。我主要了解它是如何与 libffi 交互的,但只有一件事让我感到困惑:Fiddle.dlwrap 和 Fiddle.dlunwrap 到底做了什么?

文档只是说

dlunwrap(addr)

返回内存指针地址的十六进制表示addr

dlwrap(val)

返回函数的十六进制地址位置的内存指针val

(来自ruby​​-doc.org

我尝试过让它们传入各种不同类型的对象和字符串。无论您传入什么,这些方法总是返回值(不仅仅是指向 C 函数的十六进制指针字符串)。似乎dlwrap只是返回传入对象的内存地址,但在这种情况下有两件事没有太大意义:

  1. 如果我传入一个短字符串,并使用结果作为地址创建一个指针,它指向的内存不是字符串。
  2. 如果我传入一个数字,它只会返回该数字的对象 ID。

如果有人对 Fiddle 的内部运作有一些秘密知识,并愿意分享,请帮助:)

4

0 回答 0