Python調用C/C++初步

測試庫要求作到所有自動化--動態添加新的計算圖像指標能夠直接不用重寫底層java程序……這段時間在學Python,因爲Python的ctypes能夠試python輕鬆調用動態連接庫,從而調用c/c++程序,因而想到能夠在添加指標的時候有管理員再上傳相關方法的dll或so文件,由Python進行調用新的指標計算方法進行從新計算。不知效果如何,先測試簡單的調用:javascript

一、編寫test.c
  1. #include <stdlib.h>  
  2.   
  3. int foo(int a, int b)  
  4. {  
  5.     printf("Your input %i and %i\n", a, b);  
  6.     return a + b;  
  7. }  
 
二、 gcc編譯:gcc -o test.so -shared -fPIC test.c
三、 編寫test.py
  1. import ctypes  
  2. ll = ctypes.cdll.LoadLibrary 
  3. lib = ll("./test.so")  
  4. lib.foo(13)  
四、運行
 python test.py
成功運行 Python調用C/C++初步

不過在調用c++文件的時候會發生錯誤,具體緣由不詳,但依然能夠調用!!!:
一、編寫c++文件test2.cpp
Cpp代碼    收藏代碼
  1. #include<iostream>  
  2. using namespace std;  
  3. void foo2(int a,int b)  
  4. {  
  5.     cout<<a<<" "<<b<<endl;  
  6. }  
 
//如下爲必須
Cpp代碼    收藏代碼
  1. extern "c"  
  2. {  
  3.     void cfoo2(int a,int b)  
  4.     {  
  5.         foo2(a,b);  
  6.     }  
  7. }  
 
二、編譯c++文件:
   g++ -o test2.so -shared -fPIC test2.c
三、  編寫test2.py
  1. import ctypes  
  2. ll = ctypes.cdll.LoadLibrary 
  3. lib = ll("./test2.so")  
  4. lib.cfoo2(13)
  5.   
四、運行:
python test2.py
成功!

問題補充:
一、在windows下調用dll,若是過python是64位,那麼在寫dll時編譯要用x64,要否則會出現錯誤的win32提示。
二、在h文件中:
Cpp代碼    收藏代碼
  1. extern "C" int __declspec(dllexport)add(int x,int y);  
 
cpp:
Cpp代碼    收藏代碼
  1. int __declspec(dllexport)add(int x,int y)  
  2. {  
  3.     cout<<x<<" "<<y<<endl;  
  4.     return x+y;  
  5. }  
 
相關文章
相關標籤/搜索