在c-code方面,它是:
/* Declarations */
DATABLOCK *new_db ();
edit_db(DATABLOCK **db);
/* Usage */
db = new_db();
edit_db(&db);
Ruby如何发展? https://github.com/ffi/ffi/wiki/Examples提到了MemoryPointer但是在我的情况下我已经拥有该缓冲区(由new_db()创建),那么如何将参考传递给缓冲区以获取edit_db()或它应该如何进行?有点丢失......
答案 0 :(得分:3)
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