在C代码方面:

/* Declarations */
DATABLOCK *new_db ();
edit_db(DATABLOCK **db);

/* Usage */
db = new_db();
edit_db(&db);

鲁比怎么样了?https://github.com/ffi/ffi/wiki/Examples提到了memoryPointer,但在我的例子中,我已经有了那个缓冲区(由new_db()创建),那么如何将引用传递给buffer以供编辑,或者应该如何传递?这里有点迷路。

最佳答案

edit_db()将指向指针的指针作为其参数。
所以,你需要这样的东西:

db = LibDB.new_db()

# pack the 'db' pointer into a temporary bit of memory
dbp = FFI::MemoryPointer.new(:pointer)
dbp.write_pointer(db)

# equivalent of edit_db(&db);
LibDB.edit_db(dbp)

# read the 'db' pointer back out in case edit_db altered the actual pointer value
db = dbp.read_pointer

关于ruby - 如何通过Ruby的FFI扩展使用 native C代码的动态缓冲区指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9635883/

10-13 04:41