Python調用dll


  Python可以很方便的調用C的dll,不過調用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())

 

PS:

①其中遇到了一個錯誤:OSError: [WinError 193] %1 不是有效的 Win32 應用程序,這是使用64位的Python引起的,如果想解決這一問題可以使用32位的Python或者編譯64位的dll。

②如果是_stdcall格式的API請將cdll改成windll,否則使用有參數函數時會出現:ValueError: Procedure probably called with too many arguments (8 bytes in excess)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM