資源描述:
《python與C++混合編程》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、普通方式一、環(huán)境搭建1.安裝python2.6(python3.xx版本編譯失敗,未找到原因)。2.配置vs2008項(xiàng)目(python自帶的python26.dll為release版本,所以vs2008項(xiàng)目也必須調(diào)整為release,但是通過(guò)設(shè)置也可以對(duì)release進(jìn)行調(diào)試,如果需要debug版本可以從網(wǎng)上下載已有的python26_d.dll和python26_d.lib,也可以下載python源碼自己編譯。)① C/C++---->常規(guī)--->附件庫(kù)包含目錄,加入python頭文件目錄,如下圖:② 連接器--->常規(guī)--->附件庫(kù)目錄。加入python庫(kù)文件目錄,如下圖:③
2、連接器--->輸入--->附加依賴項(xiàng)。加入python庫(kù)文件名,如下圖:二、代碼實(shí)現(xiàn)1.C++調(diào)用python① 高層次嵌入python(所謂的高層次嵌入主要是指程序與腳本間沒(méi)有交互)#includeintmain(){Py_Initialize();/*Python解釋器初始化*/PyRun_SimpleString("print'hi,python!'");/*運(yùn)行python字符串*/Py_Finalize();/*結(jié)束Python解釋器,釋放資源*/return0;}① 低層次嵌入pyton,可以交互。但是只限python的基本類型數(shù)據(jù)(整型、浮點(diǎn)型、字
3、符串、元組、列表和字典)。C++代碼:#include#includeintmain(intargc,char*argv[]){PyObject*modulename,*module,*dic,*func,*args,*rel,*list;char*funcname1="sum";inti;Py_ssize_ts;printf("-==在C中嵌入Python==-");/*Python解釋器的初始化*/Py_Initialize();if(!Py_IsInitialized()){printf("初始化失敗!");return-1;}/*導(dǎo)
4、入Python模塊,并檢驗(yàn)是否正確導(dǎo)入*/modulename=Py_BuildValue("s","pytest");/*pytest參數(shù),為python腳本,此處的意思是導(dǎo)入當(dāng)前路徑下名稱為pytest.py的python腳本文件*/module=PyImport_Import(modulename);if(!module){printf("導(dǎo)入pytest失敗!");return-1;}/*獲得模塊中函數(shù)并檢驗(yàn)其有效性*/dic=PyModule_GetDict(module);if(!dic){printf("錯(cuò)誤!");return-1;}/*獲得sum函數(shù)地址并驗(yàn)證
5、*/func=PyDict_GetItemString(dic,funcname1);if(!PyCallable_Check(func)){printf("不能找到函數(shù)%s",funcname1);return-1;}/*構(gòu)建列表*/list=PyList_New(5);printf("使用Python中的sum函數(shù)求解下列數(shù)之和");for(i=0;i<5;i++){printf("%dt",i);PyList_SetItem(list,i,Py_BuildValue("i",i));}printf("");/*構(gòu)建sum函數(shù)的參數(shù)元組*/args=PyTuple_N
6、ew(1);PyTuple_SetItem(args,0,list);/*調(diào)用sum函數(shù)*/PyObject_CallObject(func,args);/*釋放資源*/Py_DECREF(list);Py_DECREF(args);Py_DECREF(module);/*結(jié)束Python解釋器*/Py_Finalize();printf("按回車鍵退出程序:");getchar();return0;}Python代碼,pytest.py文件內(nèi)容。importmath#導(dǎo)入python自帶math庫(kù),可用于簡(jiǎn)單的數(shù)學(xué)計(jì)算defsum(p1):#定義sum函數(shù)count=len(
7、p1)sum=0foriinrange(count):#求數(shù)組中所有元素的和sum+=p1[i]print(sum)1.Python調(diào)用C++(使用python中的ctypes模塊可以很方便的調(diào)用windows的dll(也包括linux下的so等文件))fromctypesimport*dll=CDLL("add.dll")printdll.Add(1,102)結(jié)果:103利用boost庫(kù)中的,boost.python方式一、環(huán)境搭建1.下載boost庫(kù),自己編譯,或