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

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

python調用c寫函數 python3調用c代碼

python 調用c函數里面的函數嗎

若你是想調用 c 編寫的DLL,可以使用ctypes調入使用;

創(chuàng)新互聯(lián)建站是一家以重慶網站建設公司、網頁設計、品牌設計、軟件運維、seo優(yōu)化排名、小程序App開發(fā)等移動開發(fā)為一體互聯(lián)網公司。已累計為樓梯護欄等眾行業(yè)中小客戶提供優(yōu)質的互聯(lián)網建站和軟件開發(fā)服務。

#!/usr/bin/python

from?ctypes?import?*

import?os?

#需要使用絕對路徑

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使用ctypes調用C編譯dll函數方法

在函數聲明加入前綴,如

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

否則在加載該dll時會提示找不到該符號

在windows下可以通過vs自帶的dumpbin工具查看可被調用符號

dumpbin /exports test.dll

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

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

對于簡單的C函數,例如 int add(int a, int b) , 此時就可以直接調用了,如

對于較復雜的C函數的參數情況,ctypes調用時對入參和出餐做一定處理,這里分情況討論

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

怎樣讓Python腳本與C++程序互相調用

二、Python調用C/C++\x0d\x0a\x0d\x0a\x0d\x0a1、Python調用C動態(tài)鏈接庫\x0d\x0a\x0d\x0a Python調用C庫比較簡單,不經過任何封裝打包成so,再使用python的ctypes調用即可。\x0d\x0a(1)C語言文件:pycall.c\x0d\x0a\x0d\x0a[html] view plain copy \x0d\x0a/***gcc -o libpycall.so -shared -fPIC pycall.c*/ \x0d\x0a#include \x0d\x0a#include \x0d\x0aint foo(int a, int b) \x0d\x0a{ \x0d\x0a printf("you input %d and %d\n", a, b); \x0d\x0a return a+b; \x0d\x0a} \x0d\x0a(2)gcc編譯生成動態(tài)庫libpycall.so:gcc -o libpycall.so -shared -fPIC pycall.c。使用g++編譯生成C動態(tài)庫的代碼中的函數或者方法時,需要使用extern "C"來進行編譯。\x0d\x0a(3)Python調用動態(tài)庫的文件:pycall.py\x0d\x0a\x0d\x0a[html] view plain copy \x0d\x0aimport ctypes \x0d\x0all = ctypes.cdll.LoadLibrary \x0d\x0alib = ll("./libpycall.so") \x0d\x0alib.foo(1, 3) \x0d\x0aprint '***finish***' \x0d\x0a(4)運行結果:\x0d\x0a\x0d\x0a\x0d\x0a2、Python調用C++(類)動態(tài)鏈接庫 \x0d\x0a\x0d\x0a 需要extern "C"來輔助,也就是說還是只能調用C函數,不能直接調用方法,但是能解析C++方法。不是用extern "C",構建后的動態(tài)鏈接庫沒有這些函數的符號表。\x0d\x0a(1)C++類文件:pycallclass.cpp\x0d\x0a\x0d\x0a[html] view plain copy \x0d\x0a#include \x0d\x0ausing namespace std; \x0d\x0a \x0d\x0aclass TestLib \x0d\x0a{ \x0d\x0a public: \x0d\x0a void display(); \x0d\x0a void display(int a); \x0d\x0a}; \x0d\x0avoid TestLib::display() { \x0d\x0a cout \x0d\x0ausing namespace std; \x0d\x0aint test() \x0d\x0a{ \x0d\x0a int a = 10, b = 5; \x0d\x0a return a+b; \x0d\x0a} \x0d\x0aint main() \x0d\x0a{ \x0d\x0a cout \x0d\x0a#include \x0d\x0a#include \x0d\x0a \x0d\x0aint fac(int n) \x0d\x0a{ \x0d\x0a if (n

回答于?2022-11-16


標題名稱:python調用c寫函數 python3調用c代碼
網站路徑:http://weahome.cn/article/dojogeh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部