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...