windows下python的C擴展
2015/12/11 09:24:01
-
初學python,試了下python的C擴展功能。
hellopythonc代碼如下:
#include
#include
//此函數為C語言函數,供python封裝
void python_in_c(void)
{
printf("python in c\n");
}
//下面兩個函數和一個靜態數組為擴展所必須的部分
//此函數為python對上面C函數的封裝
static PyObject* out_python_in_c(PyObject *self,PyObject *args)
{
char *inArgs=NULL;
PyArg_ParseTuple(args,"s",&inArgs);
printf("%s\n",inArgs);
python_in_c();
//return NULL;
return Py_None;
}
static PyMethodDef out_methods[]={
{"python_in_c",out_python_In_C,METH_VARARGS,"Try python"},
{NULL,NULL}/*這兩個NULL用於結束數組的賦值,無實際作用*/
};
//此函數需要導出,我後面用了導出文件來重復做這件事
__declspec(dllexport) void initout(void)
{
Py_InitModule("out",out_methods);
}
/**************************THE END***************************/
導出函數文件hellopython.def為:
LIBRARY out
EXPORTS
initout @1
makefile為:
#remember run the vcvars32.bat in the vc/bin first
CXX=cl.exe
CFLAGS=-c -D XDEBUG -I D:\Python26\include
LD=link.exe
LDFLAGS=-DLL -DEF:hellopython.def
#
#
#
all: out
out:hellopython.obj {D:\Python26\libs}python26.lib
$(LD) $(LDFLAGS) -OUT:$@.pyd $**
.obj:hellopython.c
$(CXX) $(CFLAGS) $<
clean:
del *.obj out.pyd out.lib
#############################THE END######################################
makefile要運行成功,要先配置cl,link等工具的環境,在DOS下運行vc/bin目錄下的批處理文件vcvars32.bat來配置環境
編譯命令為nmake
我的python是安裝在D:\根目錄下的,將生成的out.pyd拷貝到python目錄裏的DLLs目錄中,然後在python命令行中輸入:import out如果無輸出則表明
導入成功。
測試命令為:out.python_in_c()