本文件和所包含程式為mit授權
我們來實現乙個簡單的加法的擴充套件模組!
建立乙個目錄,整個目錄名中不要包含中文。在目錄下建立
add.c,內容如下:
#include ;
static pyobject* add(pyobject *self, pyobject *args);
//一定宣告為static,把他們限制在這個檔案範圍裡。 幾乎所有的引數都是pyobject型別。 在python,每個東西都是object。
static pyobject* add(pyobject* self, pyobject* args)
static pymethoddef addmethods =
, };
/*這個是乙個c的結構。他來完成乙個對映。 我們需要把我們擴充套件的函式都對映到這個表裡。表的第乙個欄位是python真正認識的。是python
裡的方法名字。 第二個欄位是python裡的這個方法名字的具體實現的函式名。 在python裡呼叫add, 真正執行的是用c寫的add函式。
第三個欄位是meth_varargs, 他告訴python,add是呼叫c函式來實現的。第四個欄位是這個函式的說明。如果你在python裡來help這個函式,
將顯示這個說明。相當於在python裡的函式的文件說明。*/
pymodinit_func initadd()
/*注意,這個函式的名字不能改動。 必須是init+模組名字。 我們的模組名字是add。所以這個函式是initadd()。
這樣python在匯入add 的模組時候,才會找到這個函式,並呼叫。這個函式呼叫py_initmodule來將模組名字和對映表結合在一起。
他表示,add這個模組使用addmethods這個對映表。python應該這樣匯入我們的module的.*/
複製**
然後建立setup.py這個檔案,內容如下:
#! /usr/bin/python
from distutils.core import setup, extension
module1 = extension('add', sources = ['add.c'])
setup (name = 'packagename', version = '1.0', description = 'this is a demo package', ext_modules = [module1])
複製**
在msdos下進入這個目錄,輸入命令setup.py build。
如果你能編譯成功,到你所在目錄的build\lib.win32-2.3下會發現add.pyd檔案,將檔案複製到你所需要的地方,啟動python,然後:
d:\c>;python
python 2.3.3 (#51, dec 18 2003, 20:22:39) [msc v.1200 32 bit (intel)] on win32
>;>;>; import add
>;>;>; print dir(add)
['__doc__', '__file__', '__name__', 'add']
>;>;>; add.add(1,2)
3>;>;>;
複製**
使用vs2008來擴充套件python的C庫
1 首先建立乙個dll專案 注意要從win32的控制台那裡建立 然後在彈出的視窗那裡選dll和空專案 就新建了乙個空專案dll了 2 然後莪們寫乙個最簡單的hello world庫來供python來呼叫 下面是c include include char const greet boost pyth...
使用C語言來擴充套件PHP,寫PHP擴充套件dll
以前寫過一次php擴充套件dll,那個是利用呼叫系統的com口實現的擴充套件,與php不能真正融合。心血來潮,研究了一下php的原始碼,網上找了一些資料,自己嘗試寫了乙個擴充套件dll,測試沒問題。下面記錄一下具體擴充套件方法 3 把vc 6.0安裝目錄中的 microsoft visual stu...
使用C語言來擴充套件PHP,寫PHP擴充套件dll
以前寫過一次php擴充套件dll,那個是利用呼叫系統的com口實現的擴充套件,與php不能真正融合。心血來潮,研究了一下php的原始碼,網上找了一些資料,自己嘗試寫了乙個擴充套件dll,測試沒問題。下面記錄一下具體擴充套件方法 3 把vc 6.0安裝目錄中的 microsoft visual stu...