Я использую файл python для вызова структуры C ++, уже переведенной через cffi. В настоящее время я получаю ошибки, так как моя структура не вызывается. Как я могу назвать эту структуру правильно? Во-первых, правильно ли я определяю структуру в переводчике cffi?
(simple_cffi_builder.py)
import os
from cffi import FFI
ffibuilder = FFI()
basePath = os.path.dirname(__file__)
filePath = os.path.abspath(os.path.join(basePath, "..", "..", "build/bin/simple_bfs.cpp"))
runtimePath = os.path.abspath(os.path.join(basePath, "..", "..", "src/runtime_lib"))
intrinsicsPath = os.path.abspath(os.path.join(basePath, "..", "..", "src/runtime_lib/intrinsics.h"))
with open(filePath,'r') as f:
ffibuilder.set_source("_simplebfs_cffi",
f.read(),
include_dirs=[runtimePath],
source_extension = ".cpp",
extra_compile_args = ["-std=c++11"]
)
ffibuilder.cdef(
"""
struct run_bfs{};
"""
)
if __name__ == "__main__":
ffibuilder.compile(verbose=True)
Структура, которую я пытаюсь вызвать (_simplebfs_cffi.cpp):
struct run_bfs
{
void operator() ()
{
lots of code stuff
}
}
Код, который я использую для вызова сгенерированного кода C ++ (run_simple_bfs_cffi_python.py):
import os
import _simplebfs_cffi
from cffi import FFI
ffi = FFI()
class run_bfs():
def __init__(self):
self.bfs = _simplebfs_cffi.ffi.new("struct run_bfs*", None)
def __call__(self):
(self.bfs)()
run_bfs()()
Когда я пытаюсь запустить приведенный выше код, я получаю сообщение об ошибке:
Traceback (последний вызов был последним): файл "run_simple_bfs_cffi_python.py", строка 18, в run_bfs () () Файл "run_simple_bfs_cffi_python.py", строка 15, в call (self.bfs) () TypeError: cdata 'struct run_bfs *' не вызывается