用C語言擴充套件Python介面
#假設模組名字是FMBus,並且被儲存為fmbusmodule.c
#include"Python.h"
#include"structmember.h" //Python\Python36\include 路徑下
#include"object.h" //Python\Python36\include 路徑下
........
//定義物件
typedef struct {
PyObject_HEAD
int fd; /* open file descriptor: /dev/FMdev1? */
int addr; /* current address */
int value; /* address and value pairs*/
int pec; /* !0 => Packet Error Codes enabled */
} FMBus;
//定義各個回撥函式,用於填充PyTypeObject
static PyObject *FMBus_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
{
FMBus *self;
// 1,alloc memory to self;
// 2,init member value of self-
self->fd = xx;
self->addr = 0x10000;
self->value = 0;
return (PyObject *)self;
}
static int FMBus_init(FMBus *self, PyObject *args, PyObject *kwds)
{
int bus = -1;
static char *kwlist[] = {"bus", NULL};
if (!PyArg_ParseTupleAndKeywords(args, kwds, "|i:__init__",
kwlist, &bus))
return -1;
if (bus >= 0) {
FMBus_open(self, args, kwds);
if (PyErr_Occurred())
return -1;
}
return 0;
}
//定義和填充 PyTypeObject 結構體
static PyTypeObject FMBus_type=
{
PyVarObject_HEAD_INIT(NULL, 0)
"FMBus", /* tp_name */
sizeof(FMBus), /* tp_basicsize */
0, /* tp_itemsize */
(destructor)FMBus_dealloc, /* tp_dealloc */
0, /* tp_print */
0, /* tp_getattr */
0, /* tp_setattr */
0, /* tp_compare */
0, /* tp_repr */
0, /* tp_as_number */
0, /* tp_as_sequence */
0, /* tp_as_mapping */
0, /* tp_hash */
0, /* tp_call */
0, /* tp_str */
0, /* tp_getattro */
0, /* tp_setattro */
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT, /* tp_flags */
FMBus_type_doc, /* tp_doc */
0, /* tp_traverse */
0, /* tp_clear */
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
0, /* tp_iter */
0, /* tp_iternext */
FMBus_methods, /* tp_methods */
0, /* tp_members */
FMBus_getset, /* tp_getset */
0, /* tp_base */
0, /* tp_dict */
0, /* tp_descr_get */
0, /* tp_descr_set */
0, /* tp_dictoffset */
(initproc)FMBus_init, /* tp_init */
0, /* tp_alloc */
FMBus_new, /* tp_new */
};
//定義和填充 PyMethodDef 結構體
static PyMethodDef FMBus_methods[] = {
{"open", (PyCFunction)FMBus_open, METH_VARARGS | METH_KEYWORDS,
FMBus_open_doc},
{"close", (PyCFunction)FMBus_close, METH_NOARGS,
FMBus_close_doc},
{"read_byte", (PyCFunction)FMBus_read_byte, METH_VARARGS,
SMBus_read_byte_doc},
{"write_byte", (PyCFunction)FMBus_write_byte, METH_VARARGS,
SMBus_write_byte_doc}
。。。。。。
};
//定義和填充PyModuleDef
static struct PyModuleDef SMBusModule = {
PyModuleDef_HEAD_INIT,
"FMBus", /* m_name */
FMBus_module_doc, /* m_doc */
-1, /* m_size */
NULL, /* m_methods */
NULL, /* m_reload */
NULL, /* m_traverse */
NULL, /* m_clear */
NULL, /* m_free */
};
//最後,初始化模組
void PyInit_fmbus(void)
{
PyObject* m;
if (PyType_Ready(&FMBus_type) < 0)
return(NULL);
m = PyModule_Create(&FMBusModule);
if (m == NULL)
return (NULL);
Py_INCREF(&FMBus_type);
PyModule_AddObject(m, "FMBus", (PyObject *)&FMBus_type);
return (m);
}
相關推薦
用C語言擴充套件Python介面
#假設模組名字是FMBus,並且被儲存為fmbusmodule.c #include"Python.h" #include"structmember.h" //Python\Python36\include 路徑下 #include"object.h" /
用C語言擴充套件Python
最近一直在跟隨《PYTHON核心程式設計》學習一些python的編寫,可惜的是這本書的版本太過於陳舊。大部分範例程式碼都是python2的版本。 剛剛在看python用C語言寫擴充套件包的時候踩到了一個大坑,到現在沒用爬上來 跟其他的python程式碼一樣,擴充套件包也無非就是調包而已,要把python的
用C語言擴充套件Python的功能
一、簡介 Python是一門功能強大的高階指令碼語言,它的強大不僅表現在其自身的功能上,而且還表現在其良好的可擴充套件性上,正因如此,Python已經開始受到越來越多人的青睞,並且被屢屢成功地應用於各類大型軟體系統的開發過程中。 與其它普通指令碼語言有所不同,Python程式設計師可以藉助Python語
用C語言擴充套件lua模組(入門)
#include <lua.h> #include <lauxlib.h> #include <lualib.h> static void encode_sha(const char* src, char* des) { /* *sha-hash /
C語言呼叫python介面注意事項
1、需要設定python環境路徑 Py_SetPythonHome("C:\\Python27"); 否則初始化Py_Initialize();出錯 2、python的案例當做類似動態庫呼叫,不要有直接執行的程式碼 3、C向python的引數傳遞都是以組元的形式進行的
Python調用C語言
word c函數 blog 現在 sum 生成 from str and Python中的ctypes模塊可能是Python調用C方法中最簡單的一種。ctypes模塊提供了和C語言兼容的數據類型和函數來加載dll文件,因此在調用時不需對源文件做任何的修改。也正是如此奠定了這
使用ctypes調用c語言接口+使用virtualenv隔離python環境
ffffff pro 計算 virtual ima fly 隔離 語言 text 文章內容為原創,歡迎轉載請註明出處 作者: EflyPro->晦明禪師 文章來源:公眾號“睿江雲計算” 使用ctypes調用c語言接口+使用virtualenv隔離python環境
【資料結構】二叉樹介面的實現(用c語言實現)
二叉樹 概念 一棵二叉樹是結點的一個有限集合,該集合或者為空,或者是由一個根節點加上兩棵別稱為左子樹和右子樹的二又樹組成。 二叉樹的特點: 1.每個結點最多有兩棵子樹,即二叉樹不存在度大於2的結點。2.二又樹的子樹有左右之分,其子樹的次序不能顛倒 特殊的二
中國有句俗語叫“三天打魚兩天晒網”。某人從2010年1月1日起開始“三天打魚兩天晒網”,問這個人在以後的某一天中是“打魚”還是“晒網”。用C或C++語言/java/python實現程式解決問題。
提高要求:1.輸入資料的正確性驗證。 2.使用檔案進行資料測試。如將日期 20100101 20111214 等資料儲存在in.txt檔案中,程式讀入in.dat檔案進行判定,並將結果輸出至out.txt檔案。 import java.io.Bu
Socket介面原理及用C#語言實現
首先從原理上解釋一下采用Socket介面的網路通訊,這裡以最常用的C/S模式作為範例,首先,服務端有一個程序(或多個程序)在指定的埠等待客戶來連線,服務程式等待客戶的連線資訊,一旦連線上之後,就可以按設計的資料交換方法和格式進行資料傳輸。客戶端在需要的時刻發出向服務端的連
用C語言解決迷宮問題
type out reverse print top stdio.h || 當前位置 坐標 #include <stdio.h> #include <stdlib.h> #define ROW 10 #define COL 10 /*迷宮中位
用c語言指針處理字符串
image tdi while clas int color result 處理 std 字符串的處理方法有兩種:一種方法是使用字符數組處理字符串,另一種是方法是使用字符指針處理字符串。 後一種也是c語言比較常用的方法。下面我們來看一個列子: 1 #include<
用C語言讀寫數據
cor 數據 and main () term int blog abi //1-5題 #include "stdio.h" typedef struct { char name[10];//姓名 int subject1,subject2,subject3
Linux 用C語言判斷文件和文件夾
nis ces 文件 char int pat code col exist Linux 用C語言判斷文件和文件夾 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #
用c語言產生隨機數的方法
c語言產生隨機數 定義函數 rand 正態分布 time pri 行程 程序 現在 用c語言產生隨機數的方法 一、 //************************************ 偽隨機數 在C語言中,rand()函數可以用來產生隨機數,但是這不是真正意義上的
用C語言實現websocket服務器
sockaddr extend ++i set strlen ner ace == perl Websocket Echo Server Demo 背景 嵌入式設備的應用開發大都依靠C語言來完成,我去研究如何用c語言實現websocket服務器也是為了在嵌入式設備中實現一個
樹莓派進階之路 (032) -字符問題(2) - 用c語言怎樣得到一個漢字的GB2312編碼(轉)
十六進制 字符串 c++ gb2 十進制 轉換 tails 表示 blog C/C++支持的是ASCII,不過漢字編碼中,GB2312與ASCII是兼容的,所以可以在C中獲得漢字的GB2312編碼 GB2312是兩個字節的,第一字節是高八位,第二字節是低八位,比如下面的程序
用C語言實現:將三個數按從大到小輸出。
temp clas 實現 ima 編程 程序 c語言實現 從大到小 code 這個題目用編程來實現非常簡單,由於我在上一篇博客中已經介紹過使用“冒泡排序”的方法。 所以我在這裏直接給出使用“冒泡排序”寫出的代碼: #include<stdio.h> int m
用C語言實現:將數組A中的內容和數組B中的內容進行交換(數組一樣大)。
image pri 之前 es2017 sys 變量 ret 只需要 題目 之前我們已經完成了對兩個變量內容進行交換的程序,這兩道題目大同小異,不過是將兩數變成了兩數組。 可能我們會想:我們是不是需要第三個數組作為中間變量進行交換操作? 答案是no,我們只需要通過一個循環體
大神幫我做下這個題要用C語言不要C++
2.0 大神 b2c 17.1 smd baidu html ++ quest http://baobao.baidu.com/question/9aba706e437305e0b1c98c73af45448e.html?18/Uf=sMDs http://baobao.