我需要为专有库编写 Python2 包装器,由几个 .h 文件(我做了一个大)、一堆 .dll 和一个 .lib 文件来链接所有这些东西。
我认为我需要 API 级别,因为 .h 文件中的所有这些“typedef”
创建包装器的脚本:build_wrapper.py
from cffi import FFI
import setuptools
ffibuilder = FFI()
ffibuilder.set_unicode(enabled_flag=True)
with open(os.path.join(curdir, 'include', 'ScadWrapper.h'), 'r') as f:
source = f.read()
ffibuilder.set_source('_wrapper', source,
extra_link_args=[r'C:\Documents\python\pyScadApi\pyScadApi\include\SCADAPIX.lib', ],
source_extension='.cpp')
if __name__ == '__main__':
ffibuilder.compile(verbose=True)
这运行没有错误Creating library .\Release\_wrapper.lib and object .\Release\_wrapper.exp
但是,例如,
from _wrapper import ffi, lib
lp_api = ffi.new('ScadAPI *')
r = lib.ApiCreate(lp_api)
失败
lp_api = ffi.new('ScadAPI *')
ffi.error: undefined type name
ScadAPI *
ScadAPI
定义为
struct APIHandle_tag;
typedef APIHandle_tag * ScadAPI;
在 ScadWrapper.h 中