測試庫要求作到所有自動化--動態添加新的計算圖像指標能夠直接不用重寫底層java程序……這段時間在學Python,因爲Python的ctypes能夠試python輕鬆調用動態連接庫,從而調用c/c++程序,因而想到能夠在添加指標的時候有管理員再上傳相關方法的dll或so文件,由Python進行調用新的指標計算方法進行從新計算。不知效果如何,先測試簡單的調用:javascript
一、編寫test.c
- #include <stdlib.h>
-
- int foo(int a, int b)
- {
- printf("Your input %i and %i\n", a, b);
- return a + b;
- }
二、 gcc編譯:gcc -o test.so -shared -fPIC test.c
三、 編寫test.py
- import ctypes
- ll = ctypes.cdll.LoadLibrary
- lib = ll("./test.so")
- lib.foo(1, 3)
四、運行
python test.py
成功運行
不過在調用c++文件的時候會發生錯誤,具體緣由不詳,但依然能夠調用!!!:
一、編寫c++文件test2.cpp
- #include<iostream>
- using namespace std;
- void foo2(int a,int b)
- {
- cout<<a<<" "<<b<<endl;
- }
//如下爲必須
- extern "c"
- {
- void cfoo2(int a,int b)
- {
- foo2(a,b);
- }
- }
二、編譯c++文件:
g++ -o test2.so -shared -fPIC test2.c
三、
編寫test2.py
- import ctypes
- ll = ctypes.cdll.LoadLibrary
- lib = ll("./test2.so")
- lib.cfoo2(1, 3)
-
四、運行:
python test2.py
成功!
問題補充:
一、在windows下調用dll,若是過python是64位,那麼在寫dll時編譯要用x64,要否則會出現錯誤的win32提示。
二、在h文件中:
- extern "C" int __declspec(dllexport)add(int x,int y);
cpp:
- int __declspec(dllexport)add(int x,int y)
- {
- cout<<x<<" "<<y<<endl;
- return x+y;
- }