結構體傳參:
準備工作:
c++檔案(cpp):(注意在函式宣告上加上extern "c" 的修飾)
#include extern"c用g++(mingw64位)編譯為dll:" int double(int
x)float floatadd(float a,float
b) void helloworld(char *str)
void ints(int * arr,int
n) puts(
"");
}
g++ dlltest.cpp -shared -o dlltest.dll -wl,--out-implib,dlltest.lib在python指令碼中載入dll :pause
from ctypes import *dll = cdll.loadlibrary('1.如果不加任何修飾,預設傳入引數為int,傳出引數也為intdll/dlltest.dll
')
2.對於int以外的型別(如float),需要宣告python函式的傳入引數型別,傳出引數型別
fun.argtypes=[c_float,c_float] #輸出:定義傳參型別
fun.restype=c_float #
定義返回值型別
a=fun(c_float(1.4),c_float(1.2))
(type(a))
print(a)
'float3.對於字串char*,在宣告傳入引數型別時,需要宣告為字元指標,然後分配一塊char陣列,最後把這個陣列強制轉換為字元指標並且,在把python指令碼中的資料結構匯入c++中時,需要把str轉換為bytes或者bytesarray型別,並且進行迭代器分解'>
2.5999999046325684
hello=dll.helloworld輸出:hello.argtypes=[pointer(c_char)] #
傳入引數為字元指標
str=(c_char * 100)(*bytes("
相信你還在這裡
",'utf-8
')) #
把一組100個的字元定義為str
cast(str, pointer(c_char))
hello(str)
相信你還在這裡4.對於其他資料型別的陣列,(例如int*),操作相似:
ints=dll.ints輸出:ints.argtypes=[pointer(c_int),c_int]
int=(c_int * 100)(*[1,2,3]) #
把列表傳入變長引數args*中
cast(int, pointer(c_int))
ints(int,c_int(3))
1 2 3
deffillholecpp(im):
dll = cdll.loadlibrary("
bfs.dll")
bfs=dll.bfs
bfs.argtypes =[pointer(c_int),c_int]
bfs.restype =pointer(c_int)
a = np.asarray(range(16), dtype=np.int32).reshape([4, 4])
ifnot a.flags['
c_contiguous']:
a = np.ascontiguous(a, dtype=a.dtype) #
如果不是c連續的記憶體,必須強制轉換
img = cast(a.ctypes.data, pointer(c_int)) #
轉換為ctypes,這裡轉換後的可以直接利用cty
cast(img, pointer(c_int))
length=a.size
ans=bfs(img,c_int(length))
(type(ans))
for i in
range(0,length):
print(ans[i],end='
')
python 函式,傳參,呼叫
簡單函式介紹 定義 形參 實參 傳參的4中方式 呼叫 return 1.函式定義 python中函式必須先定義,再使用.寫乙個函式前要空兩行,寫完後再空兩行.pycharm書寫 def 函式名 引數 1 2 2.函式呼叫 函式名 引數 舉例 使用函式完成 1 2 定義函式 def add resul...
C 呼叫C dll時,結構體引用傳參的方法
寫了乙個c 的loglog logit 四引數等演算法的介面dll,給c 呼叫,但是發現傳參有問題 如extern c declspec dllexport bool testfunc enummethod emethod,unsigned int uipoints,const double par...
php傳參呼叫python指令碼
由於我的 專案的後端採用的是php 但是在爬蟲方面的時候 python是最簡單的選擇 因此需要php與python進行互動 需求是要帶引數的 例如自動登入某個 而使用者密碼是不同的 查閱資料得知 php有這個函式exec 這個函式的作用可以執行第三方程式 約等於在shell命令列中輸入指令 約等於c...