Python調用dll

來源:互聯網
上載者:User

標籤:

  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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.