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

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

python調(diào)用c函數(shù),python 調(diào)用c函數(shù)

python 字典調(diào)用C++函數(shù)

使用Python的ctypes,我們可以直接調(diào)用由C直接編譯出來的函數(shù)。其實就是調(diào)用動態(tài)鏈接庫中的函數(shù)。為什么我們需要這樣做呢,因為有些時候,我們可能需要一個性能上比較講究的算法,有些時候,我們可以在Python中使用已經(jīng)有了的現(xiàn)成的被封閉在動態(tài)鏈接庫中的函數(shù)。下面是如何調(diào)用的示例。

創(chuàng)新互聯(lián)建站長期為上千多家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為屏邊企業(yè)提供專業(yè)的網(wǎng)站制作、成都網(wǎng)站制作,屏邊網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

首先,我們用一個乘法來表示一個算法功能。下面是C的程序:

int?multiply(int?num1,?int?num2){???

return?num1?*?num2;

}????

如果在Windows下,你可能需要寫成下面這個樣子:

#include?windows.h?

BOOL?APIENTRYDll

Main(HANDLE?hModule,?DWORD?dwReason,?LPVOID?lpReserved){????

return?TRUE;

}?

__declspec(dllexport)?

intmultiply(int?num1,?int?num2){?

return?num1?*?num2;

}????

然后,自然是把這個C文件編成動態(tài)鏈接庫:

Linux下的編譯:

gcc?-c?-fPIC?libtest.c

gcc?-shared?libtest.o?-o?libtest.so????

Windows下的編譯:

cl?-LD?libtest.c?-libtest.dll????

于是在我們的Python中可以這樣使用:

(其中的libtest.so在Windows下改成libtest.dll即可)

from?ctypes?import?*

import?os

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

print?libtest.multiply(2,?2)4????

注意:上面的Python腳本中需要把動態(tài)鏈接庫放到當前目錄中。

python 怎么調(diào)用c語言接口

ctypes:? 可直接調(diào)用c語言動態(tài)鏈接庫。

使用步驟:

1 編譯好自己的動態(tài)連接庫

2 利用ctypes載入動態(tài)連接庫

3 用ctype調(diào)用C函數(shù)接口時,需要將python變量類型做轉(zhuǎn)換后才能作為函數(shù)參數(shù),轉(zhuǎn)換原則見下圖:

4 Python若想獲取ctypes調(diào)用的C函數(shù)返回值,需要先指定返回值類型。我們將在接下來的完整Sample中看到如何使用。

#Step?1:??test.c#include?stdio.h

int?add(int?a,?int?b)

{

return?a?+?b;

}#Step?2:?編譯動態(tài)鏈接庫?(?如何編譯動態(tài)鏈接庫在本文不詳解,網(wǎng)上資料一大堆。)gcc?-fPIC?-shared?test.c?-o?libtest.so??

#Step?3:??test.py

from?ctypes?import?*mylib?=?CDLL("libtest.so")???或者???cdll.LoadLibrary("libtest.so")???add?=?mylib.add

add.argtypes?=?[c_int,?c_int]?#?參數(shù)類型,兩個int(c_int是ctypes類型,見上表)

add.restype?=?c_int?#?返回值類型,int?(c_int?是ctypes類型,見上表)

sum?=?add(3,?6)

python怎么調(diào)用c的main函數(shù)

if

__name__=="__main__":

print

'main'

當腳本作為執(zhí)行腳本時__name__的值為__main__當腳本作為模塊時__name__為模塊文件名。舉個例子,a.py作為執(zhí)行腳本時__name__的值是__main__。有2個腳本,a.py和b.py,a中引入b,執(zhí)行a.py時,在b中模塊的__name__就是b.py

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

二、Python調(diào)用C/C++1、Python調(diào)用C動態(tài)鏈接庫Python調(diào)用C庫比較簡單,不經(jīng)過任何封裝打包成so,再使用python的ctypes調(diào)用即可。(1)C語言文件: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編譯生成動態(tài)庫libpycall.so:gcc-olibpycall.so-shared-fPICpycall.c。使用g++編譯生成C動態(tài)庫的代碼中的函數(shù)或者方法時,需要使用extern"C"來進行編譯。(3)Python調(diào)用動態(tài)庫的文件:pycall.py[html]viewplaincopyimportctypesll=ctypes.cdll.LoadLibrarylib=ll("./libpycall.so")lib.foo(1,3)print'***finish***'(4)運行結(jié)果:2、Python調(diào)用C++(類)動態(tài)鏈接庫需要extern"C"來輔助,也就是說還是只能調(diào)用C函數(shù),不能直接調(diào)用方法,但是能解析C++方法。不是用extern"C",構(gòu)建后的動態(tài)鏈接庫沒有這些函數(shù)的符號表。(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ù),python 調(diào)用c函數(shù)
當前網(wǎng)址:http://weahome.cn/article/hdscho.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部