欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

python怎么用c函數(shù) c++教程與python

python使用ctypes調(diào)用C編譯dll函數(shù)方法

在函數(shù)聲明加入前綴,如

成都創(chuàng)新互聯(lián)公司成立10年來(lái),這條路我們正越走越好,積累了技術(shù)與客戶資源,形成了良好的口碑。為客戶提供網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)、網(wǎng)站策劃、網(wǎng)頁(yè)設(shè)計(jì)、空間域名、網(wǎng)絡(luò)營(yíng)銷、VI設(shè)計(jì)、網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。網(wǎng)站是否美觀、功能強(qiáng)大、用戶體驗(yàn)好、性價(jià)比高、打開快等等,這些對(duì)于網(wǎng)站建設(shè)都非常重要,成都創(chuàng)新互聯(lián)公司通過(guò)對(duì)建站技術(shù)性的掌握、對(duì)創(chuàng)意設(shè)計(jì)的研究為客戶提供一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進(jìn)步。

__declspec(dllexport) int Fun(int a, int b)

否則在加載該dll時(shí)會(huì)提示找不到該符號(hào)

在windows下可以通過(guò)vs自帶的dumpbin工具查看可被調(diào)用符號(hào)

dumpbin /exports test.dll

C函數(shù)在調(diào)用過(guò)程中關(guān)于參數(shù)傳遞和壓棧由多種規(guī)定,作為dll提供給其他程序調(diào)用時(shí),必須明確并統(tǒng)一為同一種調(diào)用規(guī)定,否則會(huì)導(dǎo)致棧破壞,編譯器負(fù)責(zé)具體實(shí)現(xiàn)調(diào)用規(guī)定,主要有以下幾種調(diào)用規(guī)定

python下調(diào)用C庫(kù)有多種方式,ctypes是其中一種比較方便的,調(diào)用時(shí)首先需要加載dll文件,根據(jù)C dll的調(diào)用規(guī)定不同需要使用不同接口,使用ctypes需要 import ctypes 庫(kù)

對(duì)于簡(jiǎn)單的C函數(shù),例如 int add(int a, int b) , 此時(shí)就可以直接調(diào)用了,如

對(duì)于較復(fù)雜的C函數(shù)的參數(shù)情況,ctypes調(diào)用時(shí)對(duì)入?yún)⒑统霾妥鲆欢ㄌ幚恚@里分情況討論

以上包含了幾種主要的參數(shù)傳遞情況,ctypes也提供了一個(gè)較為完整的python類型和C類型的對(duì)照,如下:

如何通過(guò)Boost.Python在Python中使用C++類和函數(shù)

(1)從Boost官方網(wǎng)站下載Boost庫(kù)源文件,將其解壓至某一目錄中。

(2)將Boost解壓至的目錄添加到VC++ 6.0的【Include files】中,

(3)進(jìn)入Boost目錄下的“l(fā)ibs\python\build\VisualStudio”子目錄中,在VC++ 6.0中打開其中的“boost_python.dsw”文件。

(4)單擊【Build】|【Batch Build】命令,分別編譯Boost.Python的Debug和Release版。

(5)編譯完成后將在Boost目錄下的“l(fā)ibs\python\build\bin-stage”子目錄中生成動(dòng)態(tài)鏈接庫(kù)和庫(kù)文件。由于使

用Boost.Python編寫的Python擴(kuò)展在運(yùn)行時(shí)根據(jù)版本不同需要“boost_python.dll”和

“boost_python_debug.dll”文件。為了方便,可以將其放到Windows安裝目錄下的“system32”目錄下。否則,需要將其

和Python擴(kuò)展放在同一目錄中。

(6)將Boost目錄下的“l(fā)ibs\python\build\bin-stage”子目錄添加到VC++ 6.0的【Library files】中,

完成上述設(shè)置后就可以使用Boost.Python編寫Python擴(kuò)展了。

使用Boost.Python擴(kuò)展和嵌入Python

通過(guò)Boost.Python可以在Python內(nèi)使用C++類和函數(shù)。和SWIG一樣Boost.Python簡(jiǎn)化了編寫Python擴(kuò)展的代碼,而不用使用Python/C API。但與SWIG不同,Boost.Python是一個(gè)類庫(kù),無(wú)需再使用接口文件。

初始化和方法列表

在Boost.Python中可以通過(guò)使用BOOST_PYTHON_MODULE來(lái)命名模塊名。在BOOST_PYTHON_MODULE中則可以使用def來(lái)實(shí)現(xiàn)使用Python/C API定義的方法列表。以下是一個(gè)簡(jiǎn)單的例子。

void show()

聲明show函數(shù)

{

cout "Boost.Python";

}

BOOST_PYTHON_MODULE(example)

使用BOOST_PYTHON_MODULE命名模塊名為“example”

{

def("show",show);

相當(dāng)于定義方法列表

以上就是對(duì)如何編譯Boost.Python以及如何使用Boost.Python擴(kuò)展和嵌入Python的相關(guān)的內(nèi)容的介紹,望你會(huì)有所收獲。

python怎樣嵌入c

用c語(yǔ)言編寫一個(gè)動(dòng)態(tài)庫(kù),提供兩個(gè)函數(shù),兩個(gè)數(shù)的整形求和,兩個(gè)浮點(diǎn)數(shù)的求和。取名為mylib.c。

將c函數(shù)文件編譯成so動(dòng)態(tài)庫(kù)。運(yùn)行g(shù)cc mylib.c -fPIC -shared -o libtest.so命令,在目錄下可以看到生成的庫(kù)文件libtest.so。

Python調(diào)用so庫(kù)文件。首先導(dǎo)入ctypes,其次用CDLL加載so文件,最后調(diào)用對(duì)應(yīng)的函數(shù)。將python代碼保存到pydemo.py中。

執(zhí)行python pydemo.py查看運(yùn)行結(jié)果。

眾多python培訓(xùn)視頻,盡在python學(xué)習(xí)網(wǎng),歡迎在線學(xué)習(xí)!

如何讓python調(diào)用C和C++代碼

二、Python調(diào)用C/C++1、Python調(diào)用C動(dòng)態(tài)鏈接庫(kù)Python調(diào)用C庫(kù)比較簡(jiǎn)單,不經(jīng)過(guò)任何封裝打包成so,再使用python的ctypes調(diào)用即可。(1)C語(yǔ)言文件:pycall.c[html]viewplaincopy/***gcc-olibpycall.so-shared-fPICpycall.c*/#include#includeintfoo(inta,intb){printf("youinput%dand%d\n",a,b);returna+b;}(2)gcc編譯生成動(dòng)態(tài)庫(kù)libpycall.so:gcc-olibpycall.so-shared-fPICpycall.c。使用g++編譯生成C動(dòng)態(tài)庫(kù)的代碼中的函數(shù)或者方法時(shí),需要使用extern"C"來(lái)進(jìn)行編譯。(3)Python調(diào)用動(dòng)態(tài)庫(kù)的文件:pycall.py[html]viewplaincopyimportctypesll=ctypes.cdll.LoadLibrarylib=ll("./libpycall.so")lib.foo(1,3)print'***finish***'(4)運(yùn)行結(jié)果:2、Python調(diào)用C++(類)動(dòng)態(tài)鏈接庫(kù)需要extern"C"來(lái)輔助,也就是說(shuō)還是只能調(diào)用C函數(shù),不能直接調(diào)用方法,但是能解析C++方法。不是用extern"C",構(gòu)建后的動(dòng)態(tài)鏈接庫(kù)沒(méi)有這些函數(shù)的符號(hào)表。(1)C++類文件:pycallclass.cpp[html]viewplaincopy#includeusingnamespacestd;classTestLib{public:voiddisplay();voiddisplay(inta);};voidTestLib::display(){cout#include#includeintfac(intn){if(n2)return(1);/*0!==1!==1*/return(n)*fac(n-1);/*n!==n*(n-1)!*/}char*reverse(char*s){registerchart,/*tmp*/*p=s,/*fwd*/*q=(s+(strlen(s)-1));/*bwd*/while(p

python 調(diào)用c函數(shù)里面的函數(shù)嗎

若你是想調(diào)用 c 編寫的DLL,可以使用ctypes調(diào)入使用;

#!/usr/bin/python

from?ctypes?import?*

import?os?

#需要使用絕對(duì)路徑

extest?=?cdll.LoadLibrary(os.getcwd()?+?'/DemoC.so')

或在windows下

#!/usr/bin/python

import?ctypes

import?os?

if?os.name?==?'nt':?#?windows系統(tǒng)

_lib_name?=?os.getcwd()?+?'/DemoC.DLL'

dl200_lib?=?ctypes.WinDLL(dl200_lib_name)

文章名稱:python怎么用c函數(shù) c++教程與python
本文網(wǎng)址:http://chinadenli.net/article32/hijhpc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)網(wǎng)站建設(shè)響應(yīng)式網(wǎng)站外貿(mào)網(wǎng)站建設(shè)網(wǎng)頁(yè)設(shè)計(jì)公司手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作