欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Qt使用C/C++擴(kuò)展Python內(nèi)置模塊

系統(tǒng) 1931 0

之前和大家介紹過(guò)在C/C++中嵌入 Python ,本次和大家分享下使用 C/C++ 擴(kuò)展 Python 內(nèi)置模塊的方法。

被擴(kuò)展出來(lái)的新模塊可以做兩件無(wú)法直接在Python中完成的事情:一可以實(shí)現(xiàn)新的內(nèi)置對(duì)象類型,二則可以調(diào)用 C 庫(kù)函數(shù)和一些其他的系統(tǒng)調(diào)用。

?

使用平臺(tái):ubuntu14.04、 python3.5 Qt 5.5.1

?

下面借助Qt創(chuàng)建一個(gè)叫 libpy3extend Python 內(nèi)置模塊,它可以做一個(gè)簡(jiǎn)單的加法操作,還可以返回一個(gè)自定義的數(shù)據(jù)類型。調(diào)用形式如下:

import libpy3extend

libpy3extend.extend_add(1,99)

ibpy3extend.extend_str()

?

先使用Qt建一個(gè)生成庫(kù)的工程,之后按照步驟進(jìn)行操作即可。

?

1. extend.cpp文件首先是包含所用到的頭文件:

?

#include

#include

?

2.?向extend.cpp模塊文件中添加 C 函數(shù),該函數(shù)在執(zhí)行 libpy3extend.extend_add(1,99) ?? 時(shí)被調(diào)用。 C 函數(shù)總是有兩個(gè)參數(shù),通常命名為 self args

              
                static PyObject *extend_add(PyObject *self, PyObject *args)	
{	
    (void)(self);	
    PyObject *pArgs = NULL;	

	
    int result = 0;	
    int arg1 = 0;	
    int arg2 = 0;	

	
    if (!PyArg_ParseTuple(args, "ii",&arg1,&arg2))	
    {	
        std::cerr << "parameters error" << std::endl;	
        Py_INCREF(Py_None);	
        pArgs = Py_None;	
    }	
    else	
    {	
        result = arg1 + arg2;	
        pArgs = Py_BuildValue("i", result);	
    }	

	
    return pArgs;	
}
              
            

args參數(shù)是一個(gè)元組對(duì)象,使用 PyArg_ParseTuple() 函數(shù)來(lái)解析,解析規(guī)則可參考 python 文檔

https://docs.python.org/3/c-api/arg.html#arg-parsing

3. 創(chuàng)建模塊方法表并在表中列出函數(shù)名稱和地址。

              
                static PyMethodDef extendMethods[] = {	
    //extend add	
    {"extend_add", extend_add, METH_VARARGS, NULL},	
    {"extend_str", extend_str, METH_VARARGS, NULL},	
    {NULL, NULL, 0, NULL}	
};
              
            

METH_VARARGS 表示該函數(shù)希望參數(shù)傳遞為元組數(shù)據(jù)以使用 PyArg_ParseTuple() 函數(shù)來(lái)解析。

?

?

4.?在模塊定義結(jié)構(gòu)中引用方法表

              
                static struct PyModuleDef extendMoudle =	
    {	
        PyModuleDef_HEAD_INIT,	
        "py3extend",          /* name of module */	
        NULL,                 /* module documentation, may be NULL */	
        -1,                   /* size of per-interpreter state of the module,	
                                 or -1 if the module keeps state in global                     variables. */	
        extendMethods,	

	
        NULL,	
        NULL,	
        NULL,	
        NULL	
    };
              
            

5. 將剛才定義的結(jié)構(gòu)傳遞給模塊初始化函數(shù)中的解釋器。

注意:必須命名初始化函數(shù) PyInit_name() ,其中 name 是模塊的名稱 。我這里模塊 ? 名稱是 py3extend ,但是由于生成的是庫(kù)文件,會(huì)自動(dòng)加上 lib 前綴,所以這 ?里模塊名稱是 lib py3extend ,不是該名稱會(huì)報(bào)

ImportError: dynamic module does not define module export function? ????(PyInit_libpy3extend)

這個(gè)錯(cuò)誤。

              
                PyMODINIT_FUNC PyInit_libpy3extend(void)	
{	
    //to use thread in extend moudle	
//    if (!PyEval_ThreadsInitialized()) {	
//      PyEval_InitThreads();	
//    }	

	
    return PyModule_Create(&extendMoudle);	
}
              
            

到這里就可以借助Qt生成庫(kù)文件了,如果不知道怎么使用 Qt 生成庫(kù)文件可以參考Qt創(chuàng)建共享庫(kù)該文章。

接下來(lái)是如何使用庫(kù)文件。將庫(kù)文件與python測(cè)試文件放到同一目錄下,即可運(yùn)行測(cè)試。如圖:

Qt使用C/C++擴(kuò)展Python內(nèi)置模塊_第1張圖片

如需要完成工程可在公眾號(hào)后臺(tái)留言。

歡迎交流:

Qt使用C/C++擴(kuò)展Python內(nèi)置模塊_第2張圖片


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 亚洲精品久久久久一区二区三 | 51国产午夜精品免费视频 | 日韩无套| 一级做a免费视频 | 色婷婷久久久 | 国产日韩欧美中文 | 成人亚洲精品 | 欧美一级高潮片免费的 | 亚洲 综合 欧美 动漫 丝袜图 | 欧美视频观看 | 啪啪激情婷婷久久婷婷色五月 | 天天拍天天干 | wwwxx免费| 亚洲另类天天更新影院在线观看 | 91在线免费观看 | 国产在线精彩视频 | 这里只有精品视频 | 一级在线免费视频 | 草草草影院 | 午夜在线小视频 | 羞羞操| 九九热视频精品在线 | 王的女人印度剧电视剧免费观看32集 | 天天爽夜夜爽夜夜爽精品视频 | 免费中日高清无专码有限公司 | 看黄网站在线 | 成人av免费观看 | 亚洲综合无码一区二区 | 国产成年人网站 | 日韩一区二区在线视频 | 91短视频在线免费观看 | 乳罩双性受给攻喂奶高h | 欧美成在线视频 | 伊人午夜视频 | 久草最新| 春宵福利网站在线观看 | 日韩日日操 | 欧美二区视频 | 日韩视频在线观看免费视频 | 看中国毛片 | 欧美精品一区二区三区在线播放 |