簡體   English   中英

使用 SWIG 使用 3rd-Party 驅動程序構建 Python 模塊

[英]Using SWIG to build Python Module using 3rd-Party Drivers

我正在使用提供 Windows 驅動程序 (DLL) 和 C Header 文件的第 3 方供應商。 我想做的是使用 SWIG 將 header 文件重新編譯為 Python 模塊。

這是我的文件:
- BTICard.i
- BTICard.h
- BTICARD64.dll
- BTICARD64.lib

SWIG 接口源碼

%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

現在允許在 Python 中導入 BTICard

import BTICard
import ctypes
BTICarddll = ctypes.WinDLL('BTICARD64')
pRec1553 = SEQRECORD1553() # Doesn't initialize

BTICard.H 包含以下內容:
typedef struct - 用於初始化各種字段結構
枚舉 - 常量聲明

根據 SWIG 文檔,typedef 結構應該被轉換為 Python 類。 當我嘗試初始化 class 時,我收到了 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"],
    )

要構建 package:

$ python3.8 setup.py build_ext --inplace
running build_ext
building '_BTICard' extension
error: unknown file type '.h' (from 'BTICard.h')

這里有什么問題?

從 gcc 創建 object 后,有沒有辦法可以訪問 Python 源文件?

我要做的就是驗證一個似乎有問題的單獨 Python Wrapper(這是一個完全獨立的主題)。 還有其他方法可以創建這個 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 接口,因此將.i文件直接包含為源。 標頭包含在來源中,並且未列為來源。 您可能需要其他選擇,但這應該讓您走上正軌。 您可能需要 DLL 導出庫 ( BTICard.lib ) 並且還需要鏈接到該庫:

example_module = Extension('_BTICard',
    sources=['BTICard.i'],
    libraries=['BTICard.lib'])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM