Contents ...
udn網路城邦
windows下python的C擴展
2015/12/11 09:24
瀏覽297
迴響0
推薦0
引用0
初學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()

限會員,要發表迴響,請先登入