windows下python的C擴展 - 美好夏日的部落格 - udn部落格
美好夏日的部落格
作家:美好夏日
文章分類
    Top
    windows下python的C擴展
    2015/12/11 09:24:01
    瀏覽:288
    迴響: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()
    回應

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