標籤:
Python的運行效率並不高,不過我們可以通用調用c函數或者dll來提高效率。
下面簡單的寫一個dll:
MyDll.h
1 #ifndef MYDLL 2 #define MYDLL 3 #ifdef MY_DLL 4 #define MY_DLL extern "C" _declspec(dllimport) 5 #else 6 #define MY_DLL extern "C" _declspec(dllexport) 7 #endif 8 9 MY_DLL int fun();10 11 #endif
MyDll.cpp
1 #include"MyDll.h"2 3 4 int fun()5 {6 return 10;7 }
然後產生dll檔案使用Python調用fun函數。
1 from ctypes import windll 2 3 4 def dllfun(): 5 ll=cdll.LoadLibrary("E:\\Mydll.dll") 6 return ll.fun() 7 8 9 if __name__=="__main__":10 print(dllfun())
輸出結果:
>>>
10
>>>
PS:
①其中遇到了一個錯誤:OSError: [WinError 193] %1 不是有效 Win32 應用程式,這是使用64位的Python引起的,如果想解決這一問題可以使用32位的Python或者編譯64位的dll(前者應該是更有具有相容性的解決方案)。
②其實我原本在fun函數中寫得是"std::cout<<"PRINT"<<std::endl;",不過運行結果並沒有輸出,具體原因尚不清楚。
③如果是_stdcall格式的API請將cdll改成windll,否則使用有參數函數時會出現:ValueError: Procedure probably called with too many arguments (8 bytes in excess)。
Python調用dll