python調用clibrary
① 有誰知道python怎麼調用c#的dll
1、首選運行工具 makepy.py。
② 在python中如何調用PCSC中的介面
你找個工具將這個介面API,自動轉換成python版本的就可以了。好象是SWIG和Boost。 這兩個以前看過,偶爾還試過幾次。之所以建議你用自動工具,就是因為python對於C++擴展麻煩些,對於C語言介面可以使用ctypes和cython簡單解決。不過C++如果用這些方法有時候被很麻煩。
boost在linux里會經常用到,在windows下也可以使用。SWIG在一般的教程里都會提及到。SIP也是最近出名的。
下面是一些參考資料,搜索來的。
=== 使用工具進行擴展 ===
雖然擴展過程並不復雜,但也可以使用許多已知的工具簡化擴展過程。
(1) SWIG
由David Beazley創建,是一個自動的擴展構造工具。它讀入注釋的C/C++頭文件,為python、tcl、perl等多種腳本語言產生wrap代碼。SWIG可以包裝大量C++特性到Python的擴展模塊中。
評價:swig簡單,可以支持多種腳本文件,但支持的c++特性不完備。
(2) SIP
由Phil Thompson創建,是一個C++模塊構造器,專門為C++的類創造wrapper。它曾經被用於創建PyQt和PyKDE擴展模塊,因此比較出名。
評價:支持C++特徵很齊全,但比較復雜。
(3) bgen
該工具被包含在標准Python發布包中的模塊構建工具集里,由Jack Jansen維護。它用於產生在Macintosh版本可用的Python擴展模塊。
(4) pyfort
由Paul bois創建,用來產生Fortran語言生成的擴展模塊。
(5) cxx
也由Paul Dubois創建,是一個庫,為Python的C++擴展提供了友好的API。Cxx允許將許多python對象(如list和tuple)使用到STL的運算中。庫也提供了C++異常處理到python異常處理的轉化。
(6) WrapPy
由Greg Couch創建,通過讀入C++頭文件來產生擴展模塊。
(7) Boost Python Library
由David Abrahams創建。該庫提供了更多與眾不同的C++ wrap到python擴展中,而只需要對要擴展的C++類寫很少的附加信息。
評價:Boost為C++提供了許多實用的庫,如Regex(正則表達式庫)、Graph(圖組件和演算法)、concept check(檢查泛型編程中的concept)、Thread(可移植的C++多線程庫)、Python(把C++類和函數映射到Python之中)、Pool(內存池管理)等等。
Boost總體來說是實用價值很高,質量很高的庫。並且強調對跨平台的支持。但是Boost中也有很多是實驗性質的東西,在實際的開發中實用需要謹慎。
boost.python支持的c++特性較多,但是比較復雜。
③ 如何用python獲得C函數中的變數的值
網頁鏈接
python ctypes 第一句話:
ctypesis a foreign function library for Python. It provides C compatible data types, and allows calling functions in DLLs or shared libraries. It can be used to wrap these libraries in pure Python.
沒看到有說可以直接訪問data。
你可以這樣加這樣的函數:
intget_a()
{
returna;
}
再在python裡面調用。
④ python的opencv有源碼嗎
Python中調用cv2庫是通過編譯C/C++代碼並生成so文件實現的。opencv的cv2.so文件是通過cv2.cpp文件編譯而成。此文件位於指定的gitee倉庫中。在該倉庫的特定行,使用cmake函數add_library指定生成cv2.so。
調用cv2.so的方法僅需導入cv2庫即可。這句代碼由自動生成的python_loader.cmake文件產生,該文件同樣位於上述gitee倉庫中。生成的文件存放在python_loader文件夾下,其中cv2/__init__.py文件導入了cv2.so,並利用了其中定義的C函數。
導入cv2.so並不足夠,還需要藉助numpy來處理數據結構。因此,在python_loader/cv2/__init__.py文件中,首先導入cv2.so,然後進一步導入了額外的python_loader/cv2/_extra_py_code/等。這里import cv2的語句存在歧義,根據當前環境決定是執行cv2/__init__.py還是查找cv2.so。
在執行import cv2時,實際執行的是python_loader/cv2/__init__.py文件。在該文件中,首先刪除當前cv2模塊,然後重新導入cv2.so。接著,導入了python_loader/cv2/_extra_py_code/gapi,為cv2添加了額外的數據處理函數。最終,通過py_code_loader.init('cv2')執行了_extra_py_code.init('cv2'),將gapi整合入cv2模塊。