python ctypes呼叫c函式傳入二維陣列

2021-09-26 22:36:27 字數 1231 閱讀 8490

python呼叫c,顯然你要有兩個檔案,乙個.c,乙個.py。

使其在同一工作目錄下。

在你的c檔案中寫入這些。

前面的是給msvc看的。

#include #ifdef _msc_ver

#define dll_export __declspec( dllexport )

#else

#define dll_export

#endif

double data[400][15];

dll_export int show(double a[400][15],int trival) {

const int maxn=400;

const int feature=15;

for(int i=0;i用msvc把這個c檔案編譯到dll程度。

找到msvc:

cd到你c和python檔案的目錄下,用這條命令:

第乙個引數func.c是你c檔案的名字,第二個引數test.dll是你輸出dll的名字。旁邊會出現乙個dll和許多其他的相關檔案。

cl /ld func.c /o test.dll

注意,這個樣子會生成乙個32位的dll,如果你用64位的python是無法呼叫的,他會顯示「不是有效的win32動態鏈結庫」。

所以你要用32位的python去呼叫之。

在c檔案目錄下面新建乙個.py檔案,打入這些:

我這個的意思是用ctypes向c的dll傳入乙個二位陣列。

if __name__=="__main__":

c_func = cdll.loadlibrary(r'test.dll')

length=10

line=c_int*all_feature

data_type=line*400

data=data_type()

for i in range(400):

for j in range(all_feature):

data[i][j]=c_int(i+j)

c_func.restype=c_int

print (c_func.show(data,1))

print('***x')

執行之後沒出現錯誤,這說明你呼叫成功了。

用python ctypes呼叫動態鏈結庫

ctypes is very cool great piece of work.just van rossum ctypes使得python能夠直接呼叫c語言開發的動態鏈結庫,非常強大。為了使用ctypes,你必須依次完成以下步驟 編寫動態連線庫程式 載入動態連線庫 將python的物件轉換為cty...

python ctypes庫4 如何傳遞乙個字串

關鍵點是理解char和char char ptr 2 ab 等價於 char arr 2 char ptr 1 arr 傳遞乙個字串並返回該字串 test string dllexport char stdcall test str char str ptr 對應c test str import ...

c 呼叫lua,lua呼叫c

建立工程 引用lua的動態庫和工程專案的配置資訊 結合 main.lua指令碼檔案 print lua呼叫c lua呼叫c 結合部分 c 向lua堆疊寫東西 通過lua堆疊 lua通過lua全域性標量獲取返回lua堆疊再到c lua傳遞數字給c cgivelua wangcheng 22,1 lua...