Python调用dll
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)。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。