真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c運行python函數(shù)名 python c 調(diào)用

c++調(diào)用python

要搞明白如何讓python調(diào)用C/C++代碼(也就是寫python的extension),你需要征服手冊中的Extending embedding厚厚的一章。在昨天花了一個小時看地頭暈?zāi)X脹,仍然不知道如何寫python的extension后,查閱了一些其他書籍,最終在Python Programming On Win32書中找到了教程。 1. 首先要明白的是,所謂的python擴展(也就是你提供給python的c/c++代碼,不一定是c/c++代碼,可以是其他語言寫的代碼)是一個dll,并且這個dll放在本機python安裝目錄下的DLLs目錄下(譬如我機器上的路徑是:F:/Program Files/Python25/DLLs),假如我們接下來要寫的擴展module名為mb,python調(diào)用的代碼為:import mbmb.showMsg("Python's really amazing, I kindda love it!") 2. 搭建環(huán)境,我們要使用python提供的c頭文件和lib庫來進行擴展的開發(fā)。 在vs 2005下點擊菜單 "工具"-"選項", 打開選項對話框,選擇"項目和解決方案-VC++目錄", 然后在右邊"顯示以下內(nèi)容的目錄"得comboBox上選擇"包含文件”,添加python的include目錄(我的機器上是"F:/Program Files/Python25/include"),然后選擇庫文件,添加python的libs目錄(我的機器上是"F:/Program Files/Python25/libs")。 既然擴展是一個dll,接下來我們要建立一個“動態(tài)鏈接庫”工程,然后開始寫代碼: #include python.h //python.h是包含python一些定義的頭文件,在python的include目錄下/*我的python版本是2.5, 因為安裝python后它沒提供debug下的lib庫文件,因此你必須生成release版的dll, 想要生成dll版本的,你要到python官網(wǎng)上自己去下載python源代碼,當然你可以繼續(xù)生成release版本的dll,但dll中包含調(diào)試信息*/#pragma comment(lib, "python25.lib")//先不管static PyObject* mb_showMsg(PyObject* self, PyObject *args);/*如果你的擴展是mb,那么必須實現(xiàn)一個initmb函數(shù),并且從dll中導(dǎo)出這個函數(shù),但我們在python中調(diào)用import mb時,python會去dll里去調(diào)用 extern "C" __declspec(dllexport) void initmb(){/*當調(diào)用mb.showMsg("Python's really amazing, I kindda love it!")時, 相當于你告訴python我有一個showMsg函數(shù),我們怎么告訴python去調(diào)用我們dll里的mb_showMsg函數(shù)呢?技巧就是下面的方式,定義一個字典數(shù)據(jù)結(jié)構(gòu),key = showMsg, value =mb_showMsg,METH_VARARGS是函數(shù)調(diào)用方式,仔細查手冊吧*/static PyMethodDef mbMethods[] = { {"showMsg", mb_showMsg, METH_VARARGS}, {NULL, NULL, NULL} /*sentinel,哨兵,用來標識結(jié)束*/};//告訴python我們的模塊名叫mb, 模塊包含的函數(shù)都在mbMethods字典里 PyObject *m = Py_InitModule("mb", mbMethods);}/*接下來實現(xiàn)核心功能showMsg*///第一個self參數(shù)我們用不著,具體查手冊,第二個參數(shù)是python傳給我們的參數(shù),它是一個python的參數(shù)tuple static PyObject* mb_showMsg(PyObject* self, PyObject *args){//我們的showMsg函數(shù)需要的是一個字符串參數(shù) const char* msg = NULL;/*調(diào)用特殊參數(shù)解碼python傳遞給我們的參數(shù),s是string,我們傳遞接收參數(shù)的變量地址, 如果你的功能函數(shù)需要兩個參數(shù),在PyArg_parseTuple后面繼續(xù)添加接受參數(shù)的變量地址, 這個函數(shù)的原型是類似printf的不定參數(shù)的形式 PyAPI_FUNC(int) PyArg_ParseTuple(PyObject *, const char *, ...);*/if (!PyArg_ParseTuple(args, "s", msg)) return NULL;//調(diào)用MBint r = ::MessageBox(NULL, "hello", "Caption:Form C module", MB_ICONINFORMATION | MB_OK);//返回值return Py_BuildValue("i", r);}將上面這段混雜著大量注釋的代碼拷貝到你的編輯器里,然后編譯生成mb.dll,修改后綴成mb.pyd,然后拷貝到python的DLLs目錄下,打開idle(python的交互程序),寫入代碼:import mbmb.showMsg("Python's really amazing, I kindda love it!")

成都創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站建設(shè)、成都做網(wǎng)站與策劃設(shè)計,湛河網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:湛河等地區(qū)。湛河做網(wǎng)站價格咨詢:18980820575

請采納。

如何用python解析獲取C源文件的函數(shù)名

class stdata(Structure):

_fields_ = [('pBuf', c_char_p), ('buflen', c_int)]

N=100

buf = create_string_buffer(N)

d = stdata()

d.buflen = N

d.pBuf = cast(buf, c_char_p)

n = CallMyCFunc_GetData(byref(d))

關(guān)鍵在于create_string_buffer創(chuàng)建可寫buffer;cast轉(zhuǎn)換為char*類型。

C語言程序如何調(diào)用python程序

下面是一個例子:

首先是python的一個簡單函數(shù)

class Hello:

def __init__(self, x):

self.a = x

def print(self, x=None):

print(x)

def xprint():

print("hello world")

if __name__ == "__main__":

xprint()

h = Hello(5)

h.print()1

下面是C語言

#include python3.4m/Python.h

#include stdio.h

#include stdlib.h

#include string.h

int main()

{

Py_Initialize();

// 將當前目錄加入sys.path

PyRun_SimpleString("import sys");

PyRun_SimpleString("sys.path.append('./')");

// 導(dǎo)入hello.py模塊

PyObject *pmodule = PyImport_ImportModule("hello");

// 獲得函數(shù)xprint對象,并調(diào)用,輸出“hello world\n”

PyObject *pfunc = PyObject_GetAttrString(pmodule, "xprint");

PyObject_CallFunction(pfunc, NULL);

// 獲得類Hello并生成實例pinstance,并調(diào)用print成員函數(shù),輸出“5 6\n”

PyObject *pclass = PyObject_GetAttrString(pmodule, "Hello");

PyObject *arg = Py_BuildValue("(i)", 5);

PyObject *pinstance = PyObject_Call(pclass, arg, NULL);

PyObject_CallMethod(pinstance, "print", "i", 6);

Py_Finalize();

return 0;

}

編譯命令如下:

gcc pyapi.c -lpython3.4m -o pyapi

c如何調(diào)用python程序

C語言如何調(diào)用python,相關(guān)步驟如下:

首先,C語言中調(diào)用python,要使用頭文件Python.h。

2、接著,定義一個調(diào)用python的函數(shù)。

相關(guān)推薦:《Python教程》

3、函數(shù)中,設(shè)置python庫的路徑。

4、然后,初始化python。

5、運行一個python代碼,輸出How are you。

6、最后,釋放python。


文章名稱:c運行python函數(shù)名 python c 調(diào)用
新聞來源:http://weahome.cn/article/dosejie.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部