python調(diào)用c#函數(shù) python調(diào)用c函數(shù)
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使用ctypes調(diào)用C編譯dll函數(shù)方法
在函數(shù)聲明加入前綴,如
__declspec(dllexport) int Fun(int a, int b)
否則在加載該dll時會提示找不到該符號
在windows下可以通過vs自帶的dumpbin工具查看可被調(diào)用符號
dumpbin /exports test.dll
C函數(shù)在調(diào)用過程中關(guān)于參數(shù)傳遞和壓棧由多種規(guī)定,作為dll提供給其他程序調(diào)用時,必須明確并統(tǒng)一為同一種調(diào)用規(guī)定,否則會導致棧破壞,編譯器負責具體實現(xiàn)調(diào)用規(guī)定,主要有以下幾種調(diào)用規(guī)定
python下調(diào)用C庫有多種方式,ctypes是其中一種比較方便的,調(diào)用時首先需要加載dll文件,根據(jù)C dll的調(diào)用規(guī)定不同需要使用不同接口,使用ctypes需要 import ctypes 庫
對于簡單的C函數(shù),例如 int add(int a, int b) , 此時就可以直接調(diào)用了,如
對于較復雜的C函數(shù)的參數(shù)情況,ctypes調(diào)用時對入?yún)⒑统霾妥鲆欢ㄌ幚恚@里分情況討論
以上包含了幾種主要的參數(shù)傳遞情況,ctypes也提供了一個較為完整的python類型和C類型的對照,如下:
怎樣讓Python腳本與C++程序互相調(diào)用
二、Python調(diào)用C/C++\x0d\x0a\x0d\x0a\x0d\x0a1、Python調(diào)用C動態(tài)鏈接庫\x0d\x0a\x0d\x0a Python調(diào)用C庫比較簡單,不經(jīng)過任何封裝打包成so,再使用python的ctypes調(diào)用即可。\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)庫的代碼中的函數(shù)或者方法時,需要使用extern "C"來進行編譯。\x0d\x0a(3)Python調(diào)用動態(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)運行結(jié)果:\x0d\x0a\x0d\x0a\x0d\x0a2、Python調(diào)用C++(類)動態(tài)鏈接庫 \x0d\x0a\x0d\x0a 需要extern "C"來輔助,也就是說還是只能調(diào)用C函數(shù),不能直接調(diào)用方法,但是能解析C++方法。不是用extern "C",構(gòu)建后的動態(tài)鏈接庫沒有這些函數(shù)的符號表。\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可以包vc程序嘛
Python可以調(diào)用VC的模塊。
Python調(diào)用C++在Python腳本里添加其中ctypes是Python的一個庫,提供和C語言兼容的數(shù)據(jù)類型,可以很方便地調(diào)用CDLL中的函數(shù)。運行以上腳本得到:顯示調(diào)用C++程序成功。
采用這個方法,我們不用進行大量的改寫,也能在Python中使用我們積累的各種C++程序了。
上一篇:python怎么函數(shù)作圖 python怎么繪制函數(shù)圖像
欄 目:python
下一篇:python的全部函數(shù) python全部函數(shù)用法
本文標題:python調(diào)用c#函數(shù) python調(diào)用c函數(shù)
本文地址:http://mengdiqiu.com.cn/a1/python/17067.html
您可能感興趣的文章
- 04-02python的全部函數(shù) python全部函數(shù)用法
- 04-02python怎么函數(shù)作圖 python怎么繪制函數(shù)圖像
- 04-02python輸出隨機函數(shù) python輸出隨機字符串
- 04-02python做函數(shù)圖 python作函數(shù)圖
- 04-02inc函數(shù)python cumprinc函數(shù)
- 04-02python命令函數(shù) python 函數(shù)
- 04-02包含鏈式函數(shù)定義python的詞條
- 04-02python簡單函數(shù)編程 如何用python編寫函數(shù)
- 04-02python隨機函數(shù)種子 python隨機數(shù)種子怎么用


閱讀排行
本欄相關(guān)
- 04-02python的全部函數(shù) python全部函數(shù)用法
- 04-02python怎么函數(shù)作圖 python怎么繪制函數(shù)
- 04-02python調(diào)用c#函數(shù) python調(diào)用c函數(shù)
- 04-02python輸出隨機函數(shù) python輸出隨機字符
- 04-02inc函數(shù)python cumprinc函數(shù)
- 04-02python做函數(shù)圖 python作函數(shù)圖
- 04-02python命令函數(shù) python 函數(shù)
- 04-02包含鏈式函數(shù)定義python的詞條
- 04-02python隨機函數(shù)種子 python隨機數(shù)種子怎
- 04-02python簡單函數(shù)編程 如何用python編寫函
隨機閱讀
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10delphi制作wav文件的方法
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10C#中split用法實例總結(jié)
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 04-02jquery與jsp,用jquery
- 08-05DEDE織夢data目錄下的sessions文件夾有什