我试图了解 Ruby 的 Fiddle 库是如何工作的。我主要了解它是如何与 libffi 交互的,但只有一件事让我感到困惑:Fiddle.dlwrap 和 Fiddle.dlunwrap 到底做了什么?
文档只是说
dlunwrap(addr)
返回内存指针地址的十六进制表示
addr
dlwrap(val)
返回函数的十六进制地址位置的内存指针
val
(来自ruby-doc.org)
我尝试过让它们传入各种不同类型的对象和字符串。无论您传入什么,这些方法总是返回值(不仅仅是指向 C 函数的十六进制指针字符串)。似乎dlwrap只是返回传入对象的内存地址,但在这种情况下有两件事没有太大意义:
- 如果我传入一个短字符串,并使用结果作为地址创建一个指针,它指向的内存不是字符串。
- 如果我传入一个数字,它只会返回该数字的对象 ID。
如果有人对 Fiddle 的内部运作有一些秘密知识,并愿意分享,请帮助:)