可以使用新的extern「Python」風格cffi回調嵌入PyPy嗎? PyPy的文檔只顯示舊式cffi回調,但cffi文檔建議不要使用它們。 PyPy文檔沒有提及新的樣式回調,我無法獲得新的樣式回調。當運行編譯的C使用帶有嵌入式PyPy的extern「Python」風格cffi回調
Extern 「Python」 (new-style callbacks)
# file "interface.py"
import cffi
# add new extern "Python" declaration
ffi = cffi.FFI() ffi.cdef('''
struct API {
double (*add_numbers)(double x, double y);
extern "Python" void add_numbers2(double, double);
}; ''')
# Better define callbacks at module scope, it's important to
# keep this object alive.
@ffi.callback("double (double, double)")
def add_numbers(x, y):
return x + y
# new function
@ffi.def_extern()
def add_numbers2(x, y):
return x + y
def fill_api(ptr):
global api
api = ffi.cast("struct API*", ptr)
api.add_numbers = add_numbers
錯誤(來源C是相同PyPy文檔):
debug: OperationError:
debug: operator-type: CDefError
debug: operator-value: cannot parse "extern "Python" void add_numbers2(double, double);"
:6:5: before: extern
Error calling pypy_execute_source_ptr!
的確,我們需要檢查嵌入文檔。請注意,「embedding-using-extern-Python」的全部功能仍在開發中。同時,請注意,在「struct API」中使用「extern Python」是沒有意義的。 –