我正在使用第三方供应商,该供应商提供Windows驱动程序(DLL)和C头文件。我正在尝试使用SWIG将头文件重新编译为Python模块。
以下是我的文件:-BTICard.i-BTICard.h-BTICARD64.dll-BTICARD64.lib
%module BTICard
%include <windows.i>
%{
#define SWIG_FILE_WITH_INIT
#include "BTICard.H"
#define BTICardAPI
%}
在Cygwin中,我使用了以下命令:
swig -python -py3 BTICard.i
随后将生成以下文件:-BTICard.py-BTICard_wrap.c
在Cygwin中,为Python模块编译
gcc -c -fpic BTICARD.H BTICard_wrap.c -I/usr/include/python3.8
现在允许将BTICard用Python导入
import BTICard
import ctypes
BTICarddll = ctypes.WinDLL('BTICARD64')
pRec1553 = SEQRECORD1553() # Doesn't initialize
BTICard.H包含以下内容:typedef struct-用于初始化各种字段结构枚举-常量声明
根据SWIG文档,应该将typedef结构转换为Python类。当我尝试初始化类时,出现了NameError。我怀疑问题出在我的界面文件无法识别这些类型,因此无法转换它们。
[进一步调查,我尝试使用distutils方法并创建了setup.py
#!/usr/bin/env python3.8
"""
setup.py file for SWIG
"""
from distutils.core import setup, Extension
example_module = Extension('_BTICard',
sources=['BTICard_wrap.c', 'BTICard.h'],)
setup (name = 'BTICard',
version = '0.1',
author = "TESTER",
description = """BTICard API""",
ext_modules = [example_module],
py_modules = ["BTICard"],
)
构建软件包:
$ python3.8 setup.py build_ext --inplace
running build_ext
building '_BTICard' extension
error: unknown file type '.h' (from 'BTICard.h')
这里是什么问题?
从gcc创建对象后,有没有办法可以访问Python源文件?
我要做的就是验证似乎有问题的单独的Python包装器(这是一个完全独立的主题)。还有另一种方法可以创建此Python模块吗?
.i
文件不包括要导出的界面。它应该看起来像:
%module BTICard
%{
#include "BTICard.H" // this just makes the interface available to the wrapper.
%}
%include <windows.i>
%include "BTICard.h" // This wraps the interface defined in the header.
[setup.py
了解SWIG接口,因此来源应为:
sources=['BTICard.i']
标题包含在源中,未在as源中列出。您可能需要其他选择,但这应该可以使您走上正确的轨道。