python調用c++


Python C/C++ 使用ctypes編寫拓展

ctypes 是一個Python 標准庫中的一個庫.為了實現調用 DLL,或者共享庫等C數據類型而設計.它可以把這些C庫包裝后在純Python環境下調用.本教程是在MAC下進行的

C++代碼

#include <stdio.h>
#ifdef __cplusplus 
    #define XETR extern "C"
#else
    #define XETR
#endif   

#ifdef _WIN32
    #define LIB XETR __declspec(dllexport)
#else
    #define LIB XETR
#endif

LIB  void CtypesDemo(const wchar_t *str,int x,int y){
    printf("Cpp %ls %d\n",str,x+y);
}        

因為系統不同,調用方式不同
_WIN32:表示win32和win64
__declspec(dllexport)用於Windows中的動態庫中,聲明導出函數、類、對象等供外面調用。
extern "C" 的作用是讓 C++ 編譯器將 extern "C" 聲明的代碼當作 C 語言代碼處理,可以避免 C++ 因符號修飾導致代碼不能和C語言庫中的符號進行鏈接的問題。

將C++文件編譯成so文件

g++ -fPIC -shared -o ctypes ctypes.cpp

windows用戶可以使用Visual studio 2015編譯生成dll文件。
在mac和linux沒有dll文件,一般都是so文件。

Python代碼調用

from  ctypes import *
lib=CDLL("ctypes")
lib.CtypesDemo("公眾號:Python學習開發",4,5)

總結

關於ctype是的基本用法大概就這么多,實際上在編寫Python拓展庫的時,如果要最終生成Python模塊並導入使用,就要遵循Python API進行編寫,所有的函數定義都是遵循一定的規則,關注這部分內容,目前也已經寫完,正在修改中,后續將會發布,敬請關注!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM